UNPKG

1.25 kBJavaScriptView Raw
1var workQueue = require('./workQueue');
2var Promise = require('unexpected-bluebird');
3var useFullStackTrace = require('./useFullStackTrace');
4
5module.exports = function oathbreaker(value) {
6 if (!value || typeof value.then !== 'function') {
7 return value;
8 }
9
10 if (!value.isRejected) {
11 // this is not a bluebird promise
12 return value;
13 }
14
15 if (value.isFulfilled()) {
16 return value;
17 }
18
19 if (value.isRejected()) {
20 value.caught(function () {
21 // Ignore - already handled
22 });
23
24 throw value.reason();
25 }
26
27 var onResolve = function () {};
28 var onReject = function () {};
29
30 var evaluated = false;
31 var error;
32 value.then(
33 function (obj) {
34 evaluated = true;
35 onResolve(value);
36 },
37 function (err) {
38 evaluated = true;
39 error = err;
40 onReject(err);
41 }
42 );
43
44 workQueue.drain();
45
46 if (evaluated && error) {
47 if (error._isUnexpected && Error.captureStackTrace) {
48 Error.captureStackTrace(error);
49 }
50 throw error;
51 } else if (evaluated) {
52 return value;
53 } else if (value._captureStackTrace && !useFullStackTrace) {
54 value._captureStackTrace(true);
55 }
56
57 return new Promise(function (resolve, reject) {
58 onResolve = resolve;
59 onReject = reject;
60 });
61};