From bbff7403fbf46f9ad92240ac213df8d30ef31b64 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 20 Sep 2018 02:56:13 +0200 Subject: update packages --- node_modules/core-js/modules/es6.promise.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'node_modules/core-js/modules/es6.promise.js') diff --git a/node_modules/core-js/modules/es6.promise.js b/node_modules/core-js/modules/es6.promise.js index 88bf65d4c..b0ff3bfcf 100644 --- a/node_modules/core-js/modules/es6.promise.js +++ b/node_modules/core-js/modules/es6.promise.js @@ -13,10 +13,13 @@ var task = require('./_task').set; var microtask = require('./_microtask')(); var newPromiseCapabilityModule = require('./_new-promise-capability'); var perform = require('./_perform'); +var userAgent = require('./_user-agent'); var promiseResolve = require('./_promise-resolve'); var PROMISE = 'Promise'; var TypeError = global.TypeError; var process = global.process; +var versions = process && process.versions; +var v8 = versions && versions.v8 || ''; var $Promise = global[PROMISE]; var isNode = classof(process) == 'process'; var empty = function () { /* empty */ }; @@ -31,7 +34,13 @@ var USE_NATIVE = !!function () { exec(empty, empty); }; // unhandled rejections tracking support, NodeJS Promise without it fails @@species test - return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise; + return (isNode || typeof PromiseRejectionEvent == 'function') + && promise.then(empty) instanceof FakePromise + // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables + // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 + // we can't detect it synchronously, so just check versions + && v8.indexOf('6.6') !== 0 + && userAgent.indexOf('Chrome/66') === -1; } catch (e) { /* empty */ } }(); @@ -53,7 +62,7 @@ var notify = function (promise, isReject) { var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; - var result, then; + var result, then, exited; try { if (handler) { if (!ok) { @@ -63,8 +72,11 @@ var notify = function (promise, isReject) { if (handler === true) result = value; else { if (domain) domain.enter(); - result = handler(value); - if (domain) domain.exit(); + result = handler(value); // may throw + if (domain) { + domain.exit(); + exited = true; + } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); @@ -73,6 +85,7 @@ var notify = function (promise, isReject) { } else resolve(result); } else reject(value); } catch (e) { + if (domain && !exited) domain.exit(); reject(e); } }; -- cgit v1.2.3