/script-kiddie/002_script_kiddie/script-kiddie/node_modules/bluebird/js/release/thenables.js |
@@ -0,0 +1,86 @@ |
"use strict"; |
module.exports = function(Promise, INTERNAL) { |
var util = require("./util"); |
var errorObj = util.errorObj; |
var isObject = util.isObject; |
|
function tryConvertToPromise(obj, context) { |
if (isObject(obj)) { |
if (obj instanceof Promise) return obj; |
var then = getThen(obj); |
if (then === errorObj) { |
if (context) context._pushContext(); |
var ret = Promise.reject(then.e); |
if (context) context._popContext(); |
return ret; |
} else if (typeof then === "function") { |
if (isAnyBluebirdPromise(obj)) { |
var ret = new Promise(INTERNAL); |
obj._then( |
ret._fulfill, |
ret._reject, |
undefined, |
ret, |
null |
); |
return ret; |
} |
return doThenable(obj, then, context); |
} |
} |
return obj; |
} |
|
function doGetThen(obj) { |
return obj.then; |
} |
|
function getThen(obj) { |
try { |
return doGetThen(obj); |
} catch (e) { |
errorObj.e = e; |
return errorObj; |
} |
} |
|
var hasProp = {}.hasOwnProperty; |
function isAnyBluebirdPromise(obj) { |
try { |
return hasProp.call(obj, "_promise0"); |
} catch (e) { |
return false; |
} |
} |
|
function doThenable(x, then, context) { |
var promise = new Promise(INTERNAL); |
var ret = promise; |
if (context) context._pushContext(); |
promise._captureStackTrace(); |
if (context) context._popContext(); |
var synchronous = true; |
var result = util.tryCatch(then).call(x, resolve, reject); |
synchronous = false; |
|
if (promise && result === errorObj) { |
promise._rejectCallback(result.e, true, true); |
promise = null; |
} |
|
function resolve(value) { |
if (!promise) return; |
promise._resolveCallback(value); |
promise = null; |
} |
|
function reject(reason) { |
if (!promise) return; |
promise._rejectCallback(reason, synchronous, true); |
promise = null; |
} |
return ret; |
} |
|
return tryConvertToPromise; |
}; |