corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 "use strict";
2 module.exports = function(Promise, INTERNAL) {
3 var util = require("./util");
4 var errorObj = util.errorObj;
5 var isObject = util.isObject;
6  
7 function tryConvertToPromise(obj, context) {
8 if (isObject(obj)) {
9 if (obj instanceof Promise) return obj;
10 var then = getThen(obj);
11 if (then === errorObj) {
12 if (context) context._pushContext();
13 var ret = Promise.reject(then.e);
14 if (context) context._popContext();
15 return ret;
16 } else if (typeof then === "function") {
17 if (isAnyBluebirdPromise(obj)) {
18 var ret = new Promise(INTERNAL);
19 obj._then(
20 ret._fulfill,
21 ret._reject,
22 undefined,
23 ret,
24 null
25 );
26 return ret;
27 }
28 return doThenable(obj, then, context);
29 }
30 }
31 return obj;
32 }
33  
34 function doGetThen(obj) {
35 return obj.then;
36 }
37  
38 function getThen(obj) {
39 try {
40 return doGetThen(obj);
41 } catch (e) {
42 errorObj.e = e;
43 return errorObj;
44 }
45 }
46  
47 var hasProp = {}.hasOwnProperty;
48 function isAnyBluebirdPromise(obj) {
49 try {
50 return hasProp.call(obj, "_promise0");
51 } catch (e) {
52 return false;
53 }
54 }
55  
56 function doThenable(x, then, context) {
57 var promise = new Promise(INTERNAL);
58 var ret = promise;
59 if (context) context._pushContext();
60 promise._captureStackTrace();
61 if (context) context._popContext();
62 var synchronous = true;
63 var result = util.tryCatch(then).call(x, resolve, reject);
64 synchronous = false;
65  
66 if (promise && result === errorObj) {
67 promise._rejectCallback(result.e, true, true);
68 promise = null;
69 }
70  
71 function resolve(value) {
72 if (!promise) return;
73 promise._resolveCallback(value);
74 promise = null;
75 }
76  
77 function reject(reason) {
78 if (!promise) return;
79 promise._rejectCallback(reason, synchronous, true);
80 promise = null;
81 }
82 return ret;
83 }
84  
85 return tryConvertToPromise;
86 };