08-27-周三_17-09-29
This commit is contained in:
63
node_modules/promise/lib/node-extensions.js
generated
vendored
Normal file
63
node_modules/promise/lib/node-extensions.js
generated
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
'use strict';
|
||||
|
||||
//This file contains then/promise specific extensions that are only useful for node.js interop
|
||||
|
||||
var Promise = require('./core.js')
|
||||
var asap = require('asap')
|
||||
|
||||
module.exports = Promise
|
||||
|
||||
/* Static Functions */
|
||||
|
||||
Promise.denodeify = function (fn, argumentCount) {
|
||||
argumentCount = argumentCount || Infinity
|
||||
return function () {
|
||||
var self = this
|
||||
var args = Array.prototype.slice.call(arguments)
|
||||
return new Promise(function (resolve, reject) {
|
||||
while (args.length && args.length > argumentCount) {
|
||||
args.pop()
|
||||
}
|
||||
args.push(function (err, res) {
|
||||
if (err) reject(err)
|
||||
else resolve(res)
|
||||
})
|
||||
var res = fn.apply(self, args)
|
||||
if (res && (typeof res === 'object' || typeof res === 'function') && typeof res.then === 'function') {
|
||||
resolve(res)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Promise.nodeify = function (fn) {
|
||||
return function () {
|
||||
var args = Array.prototype.slice.call(arguments)
|
||||
var callback = typeof args[args.length - 1] === 'function' ? args.pop() : null
|
||||
var ctx = this
|
||||
try {
|
||||
return fn.apply(this, arguments).nodeify(callback, ctx)
|
||||
} catch (ex) {
|
||||
if (callback === null || typeof callback == 'undefined') {
|
||||
return new Promise(function (resolve, reject) { reject(ex) })
|
||||
} else {
|
||||
asap(function () {
|
||||
callback.call(ctx, ex)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Promise.prototype.nodeify = function (callback, ctx) {
|
||||
if (typeof callback != 'function') return this
|
||||
|
||||
this.then(function (value) {
|
||||
asap(function () {
|
||||
callback.call(ctx, null, value)
|
||||
})
|
||||
}, function (err) {
|
||||
asap(function () {
|
||||
callback.call(ctx, err)
|
||||
})
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user