12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- 'use strict'
- var nextTick = nextTickArgs
- process.nextTick(upgrade, 42) // pass 42 and see if upgrade is called with it
- module.exports = thunky
- function thunky (fn) {
- var state = run
- return thunk
- function thunk (callback) {
- state(callback || noop)
- }
- function run (callback) {
- var stack = [callback]
- state = wait
- fn(done)
- function wait (callback) {
- stack.push(callback)
- }
- function done (err) {
- var args = arguments
- state = isError(err) ? run : finished
- while (stack.length) finished(stack.shift())
- function finished (callback) {
- nextTick(apply, callback, args)
- }
- }
- }
- }
- function isError (err) { // inlined from util so this works in the browser
- return Object.prototype.toString.call(err) === '[object Error]'
- }
- function noop () {}
- function apply (callback, args) {
- callback.apply(null, args)
- }
- function upgrade (val) {
- if (val === 42) nextTick = process.nextTick
- }
- function nextTickArgs (fn, a, b) {
- process.nextTick(function () {
- fn(a, b)
- })
- }
|