From 68fe2d9ad087aff5325a8f46c48f62ddd5100710 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Mon, 10 Aug 2020 23:42:34 -0700 Subject: [PATCH] Simplified promise rejection handling --- microscript/ILibDuktape_Polyfills.c | 2 +- modules/promise.js | 112 +++++++++++++--------------- 2 files changed, 51 insertions(+), 63 deletions(-) diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 5a6e088..dbe2fe0 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2230,7 +2230,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('clipboard', Buffer.from('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', 'base64'));"); // Promise: This is very important, as it is used everywhere. Refer to /modules/promise.js to see a human readable version of promise.js - duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('eJy9Gttu47j13YD/gcnDWt6odmaeirheIM1kUKODpIgzs10Eg4CRaVtZWXIpKU4wyL/3HFIXXmUnHdQvtsnDc+e5SeNf+72LbPvC49W6IB9PP/yVzNKCJeQi49uM0yLO0n6v3/sSRyzN2YKU6YJxUqwZOd/SCL6qnZB8YzwHaPJxdEoCBDiuto6Hk37vJSvJhr6QNCtImTPAEOdkGSeMsOeIbQsSpyTKNtskpmnEyC4u1oJKhWPU7/1RYcgeCgrAFMC38G+pghFaILcEPuui2J6Nx7vdbkQFp6OMr8aJhMvHX2YXl1fzy78At3jia5qwPCec/aeMOYj58ELoFpiJ6AOwmNAdyTihK85gr8iQ2R2PizhdhSTPlsWOctbvLeK84PFDWWh6qlkDeVUA0BRNyfH5nMzmx+Tv5/PZPOz3fp/d/uP66y35/fzm5vzqdnY5J9c35OL66tPsdnZ9Bf8+k/OrP8g/Z1efQsJAS0CFPW85cg8sxqhBtgB1zRnTyC8zyU6+ZVG8jCMQKl2VdMXIKntiPAVZyJbxTZyjFXNgbtHvJfEmLoQT5LZEQOTXMSrviXLQ3PJW6GpKfrxOcHVZphGeJCtW3GRZ8S+eAXIWZA+Pw37vh7TSbg0ugEujLagwrYGGcrcCwg+AAGoLcCIhXuUXZ0XJUyJIwM6rzsQncLO1Th45j7IyLQD3h4nCEjmEp5MTcXbyTi7F4YpPhVP2BAfvc7gB4LT8fs0SMEuwYDk65n1Ek4TBbSsoB5FCNCs436IVCS/W6P764ZFFxewTcDPQEQ4mChwSBZCGNv4IbEFRTUAvB9C774q48ZIEeGRUcUGOpiQtk2RIfgj40bbM1xrEcFJrAT+wGCDuGC8UHCg3wGk+bAEUHvDT4myA7+LvQ4UjBXmtZkFeqmuEd/pFrlQKDQXSYY3j1dRODQei6yawACUJgJM/rP1aR9PaZhZEzpIlnocFw3t1E3qcofWBWvSU7d7kTkOfN1Ycw8E8K3nEwL0w8OHPK7ppzotl+ROXW4aaU6MsDdRzpItJCykiYBCRNCJDoTxwLPEx+a+jzlZ+f0bQjrtSgWmXpFprLdMejSFX8pQmGPVIg+iswTOqAQYhqZbOxNFQXLUzorAVyvzHIDmckSVNMKcyzjOeN38bgHPw2TO4iyGY+nEOylAPwdIFhpYzchqC00LQg1+NZ1cpLpBhIR8MR5f44xLUCqyO0CECXbihU2S05ABs9wVyGkshroRtGAkEbmlh8fMCsD7Q6E87tIzHESSXLGGjJFuZCBU0A6mK8YCcSEbkf/g3aNXS7jZLanAQeYrIEDWp64Q6jjW0yBT8APJpljyxxYD88gs5UgnCf4OCN1whLU38Kv5IB9CxoEVVXiVbAT+aioCqbxh0GuPg3biXl/8bTUowciMHuIWJ/tUZNl26QLeudPFOVQjVY3A0igH1gpn8ieS8hjO8cO48K0lb3UkjLZ/XH1lqROv9ukQVRGvF1ZPKJcW1ClqFDMlv5HRoI3DgxI9g7GRKDsM9sZG82kughpMTB6hQHBK6j0DuhV6IePBJuZ9BKF4oHIoQgindXhU0nicuREJYA1MdmSxk9QZeTjgnENootSP38WaDHujG89vUJcNey0cJo3y22bBFTAtmE3QZxeaqiTDdoGuaFF/TiJbYekFy4eUe+7w3lnTe7pwVRaJe7gNus5+RO1c19urJIFVw4moFel8vOspQZL7ZH91juaRwiz4lQp/mjiZ8FbqmMllO/IANYts0XtBzR42s1s5tODaraGf4buOtP64Pm5rba61OdmU5vZeK6fj0fUcVwzBQv5dlbFZFZ0B9nYHj0IGytq0D/e66z64mw4b0J09xPmHpCsPjlHxEK+La3YfvMpkLs75sWbYMqvWhuImZKB8HCrxamyrFaXea3XI7zZpq8WTcLX9bfGrY/Pf8y2cAMch4oIs1S4O2VtxvVCEV5ZuOO1R/Wsfx9pQdhIQOkJBl/9jpKo58LEMc6kNcCiU4ytVQErDcKTQuQFtKH1j7SZp136GnfX0a4c9P+xH53cOMp2/ACVk7sHwRP+OxafqqOILWwGX98fi96n9PkLJSS0vQ2KqGDJP954MmH7vyqC+NolYyM43KRX8alfuHp1ENvkmjdmp0430D6AFZtHIDFWJ/yrDN56e/PwHsTxNaDVv3nnZg1phwBGY8ibWadcNESaz7QTUKwGwhoDt6U89BV5jn7kr9tAOs7g5MGCGIQcLS00LqSc5rD9AQKmKBvYazaXFwtTAaDNeNOLTn69ar1NXJ1PK2Q9o+jUfrBmrRRt2yow3Kt3mPM7iCOk4lXEL+zaFqHJ5wR9N25C009mc7C9+UQMxsmzYldYYkRheItbYMZ24Ry/Mq3pYV4UvxGArOQXJpxnf15o1QMGyeERwxMRxjh3VBE6osddeJ3ea0g78W8SNaiK6+FlBI6h7W+0YtplPYDS6oSzbBuPpEE1cP7G95VXGtcWHEAi2D6zPtdipaD3QrFSgaWMaAKXlRE51HCU7itXYPp62qH8tWjXJdiIqJq5DKnWtrONStRynNkM7JWIOgnnS/mgQ08o578y5bNGg1nRhOrX8ML2TFNzEbxxF/7YaK/kLy2OoEqAHk40SvxSSK/V2Jo5tuzxww0RiPyS0+ka5n/TuaE5pwRhcvpLVznhHAkxNQUvQnUsKnoWuaLhLGq6oJwiatsdi9GX+qniIo3HX1zo7Q+3ToRFgA7+8gOzAIAzx1uatlnrqkPbBb0uvrfaz4iIGcB9Azh2kWaW9n9RPkd48LOtuLn0L7DfHYgU9mKMd9NPtJ5cFYS0rr8nCML87qyMRjSrmhBl1Pn6O2S9ZF6m6OfIdaYvzFit7K07n2wVjo48uxoSuwMobI44HjfQIzMHh6LF90Oxyy7rC0JtoRlvQcMdwHbFUvtW4hFB3ticnaI0Eyp08MXylh4GYRky/5QHSWEzLVgeRLJ3cGckgS+foiW7Bg+N3nJ94r0VYJyoxKdMUaMZ1EVf0YlpaxF2phKFwYXIQt40U9KT9uNHAcqtJD1XZGnNMxs2ivbo9XsZ5BvLBKPXupfFeta6qlQH9L5sBc3mjA9cpI06I7Z3OKeN3vebSv0bjjX9UVmft6W2THHow7rVrQcLpWcAUd4f+jk5+hjiry/e/qgNCn6gIjYRUa8WG95Sh+jTBZVvpCX9MUiWzxaGcU5YkR/LT3Fa4ARPlngy6y1DVUqVOXMeMQNnRZTNeDIZWyCQbrGHzb1ei8jLBJteq/kxNQcMugyKq64NWzhwMaaXGy0oNj7NPCtIWWSayrzlEDKPhap7ifaZyUnFniHrVM/lyBquko8tUhgnHHsLewNY1WOLWNb6jOoTTjfUD4ri9ev7fJFmXCRux5m/ECI0b7BF/fGum9W/3KSbPgO9C80tWcaFYm/wVtl7Xy', 'base64'));"); + duk_peval_string_noresult(ctx, "addCompressedModule('promise', Buffer.from('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', 'base64'));"); #ifdef WIN32 // Adding win-registry, since it is very useful for windows... Refer to /modules/win-registry.js to see a human readable version diff --git a/modules/promise.js b/modules/promise.js index 2c7989d..9af0d16 100644 --- a/modules/promise.js +++ b/modules/promise.js @@ -24,16 +24,6 @@ function getRootPromise(obj) } return (obj); } -function getDepth(obj) -{ - var count = 1; - while (obj.parentPromise) - { - ++count; - obj = obj.parentPromise; - } - return (count); -} function event_switcher_helper(desired_callee, target, forward) { @@ -67,8 +57,28 @@ function Promise(promiseFunc) { this._ObjectID = 'promise'; this.promise = this; - this._internal = { _ObjectID: 'promise.internal', promise: this, func: promiseFunc, completed: false, errors: false, completedArgs: [], rejStarted: false, rejCount: 0, depth: 0 }; + this._internal = { _ObjectID: 'promise.internal', promise: this, func: promiseFunc, completed: false, errors: false, completedArgs: [], internalCount: 0, _up: null }; require('events').EventEmitter.call(this._internal); + Object.defineProperty(this, "parentPromise", + { + get: function () { return (this._up); }, + set: function (value) + { + if (value != null && this._up == null) + { + // We are no longer an orphan + if (this._internal.uncaught != null) + { + clearImmediate(this._internal.uncaught); + this._internal.uncaught = null; + } + } + this._up = value; + } + }); + + + this._internal.on('newListener', function (eventName, eventCallback) { //console.log('newListener', eventName, 'errors/' + this.errors + ' completed/' + this.completed); @@ -82,30 +92,25 @@ function Promise(promiseFunc) this.emit_returnValue('resolved', r); } } + + if (eventName == 'rejected' && (eventCallback.internal == null || eventCallback.internal == false)) + { + var rp = getRootPromise(this.promise); + rp._internal.external = true; + if (this.uncaught != null) + { + clearImmediate(this.uncaught); + this.uncaught = null; + } + if (rp._internal.uncaught != null) + { + clearImmediate(rp._internal.uncaught); + rp._internal.uncaught = null; + } + } + if (eventName == 'rejected' && this.errors && this.completed) { - var rt = getRootPromise(this.promise); - var ch = rt; - var chx = 1; - var ncnt = 1; - while(ch) - { - if (ch._internal.listenerCount('rejected') > 0) - { - ncnt += ch._internal.listenerCount('rejected'); - } - chx++; - ch = ch.__childPromise; - } - if (chx > rt._internal.depth) { rt._internal.depth = chx; } - if (ncnt > rt._internal.rejCount) { rt._internal.rejCount = ncnt; } - - if (rt._internal._imm && rt._internal.rejCount >= rt._internal.depth) - { - clearImmediate(rt._internal._imm); - rt._internal._imm = null; - rt._internal._haltUncaught = true; - } eventCallback.apply(this, this.completedArgs); } if (eventName == 'settled' && this.completed) @@ -136,7 +141,6 @@ function Promise(promiseFunc) if (args.length == 2 && args[1]!=null && typeof(args[1]) == 'object' && args[1]._ObjectID == 'promise') { var pr = getRootPromise(_resolver._self.promise); - pr._internal._haltUncaught = true; args[1]._XSLF = _resolver._self; args[1].then(function () { @@ -150,7 +154,6 @@ function Promise(promiseFunc) function (e) { this._XSLF.promise.__childPromise.parentPromise = null; - this._XSLF.promise.__childPromise._internal._haltUncaught = false; this._XSLF.promise.__childPromise._rej(e); //var parms = ['rejected', e]; //this._XSLF.emit.apply(this._XSLF, parms); @@ -176,39 +179,22 @@ function Promise(promiseFunc) } var r = getRootPromise(_rejector._self.promise); - var me = false; - if (r._internal.rejStarted == false) + if ((r._internal.external == null || r._internal.external == false) && r._internal.uncaught == null) { - r._internal.rejStarted = true; - r._internal.rejCount = 0; - r._internal.depth = 0; - me = true; - } - - var d = getDepth(_rejector._self.promise); - if (d > r._internal.depth) { r._internal.depth = d; } - - if (_rejector._self.listenerCount('rejected') > 0) - { - r._internal.rejCount += _rejector._self.listenerCount('rejected'); + r._internal.uncaught = setImmediate(function (a) + { + process.emit('uncaughtException', 'promise.uncaughtRejection: ' + JSON.stringify(a)); + }, arguments[0]); } _rejector._self.emit.apply(_rejector._self, args); - if (me) - { - r._internal.rejStarted = false; - if(r._internal.rejCount < r._internal.depth && !r._internal._imm && !r._internal._haltUncaught) - { - r._internal._imm = setImmediate(function (e, i) { i._imm = null; process.emit('uncaughtException', 'promise.uncaughtRejection: ' + e); }, args[1], r._internal); - } - } - _rejector._self.emit('settled'); }; + this._internal.rejector.internal = true; + this.catch = function(func) { var rt = getRootPromise(this); - if (rt._internal._imm) { clearInterval(rt._internal._imm); rt._internal._imm = null; } this._internal.once('rejected', event_switcher(this, func).func); } this.finally = function (func) @@ -224,7 +210,7 @@ function Promise(promiseFunc) } var retVal = new Promise(function (r, j) { this._rej = j; }); - retVal._internal._haltUncaught = true; + retVal.parentPromise = this; if (this._internal.completed) { @@ -234,7 +220,9 @@ function Promise(promiseFunc) { if(rv._ObjectID == 'promise') { + rv.parentPromise = this; rv._internal.once('resolved', retVal._internal.resolver); + rv._internal.once('rejected', retVal._internal.rejector); } else { @@ -244,14 +232,14 @@ function Promise(promiseFunc) else { this._internal.once('resolved', retVal._internal.resolver); + this._internal.once('rejected', retVal._internal.rejector); } } else { this._internal.once('resolved', retVal._internal.resolver); + this._internal.once('rejected', retVal._internal.rejector); } - this._internal.once('rejected', retVal._internal.rejector); - retVal.parentPromise = this; this.__childPromise = retVal; return (retVal); };