diff --git a/utils/promise/Promise.try.js b/utils/promise/Promise.try.js new file mode 100644 index 00000000000..c349b20b929 --- /dev/null +++ b/utils/promise/Promise.try.js @@ -0,0 +1,6 @@ +Promise.try = function promiseTry(callbackFn) { + var args = arguments; + return new Promise(function (resolve) { + resolve(callbackFn.apply(undefined, iterableToArray(args).slice(1))); + }); +}; diff --git a/utils/promise/Promise.withResolvers.js b/utils/promise/Promise.withResolvers.js new file mode 100644 index 00000000000..c7c2064d252 --- /dev/null +++ b/utils/promise/Promise.withResolvers.js @@ -0,0 +1,11 @@ +Promise.withResolvers = function () { + var resolve; + var reject; + + var promise = new Promise(function (res, rej) { + resolve = res; + reject = rej; + }); + + return { promise: promise, resolve: resolve, reject: reject }; +} diff --git a/utils/promise/index.js b/utils/promise/index.js index fbbe48c1b52..cad85e74d3b 100644 --- a/utils/promise/index.js +++ b/utils/promise/index.js @@ -5,6 +5,8 @@ const Promise = require('promise/setimmediate/es6-extensions'); require('promise/setimmediate/finally'); +require('./Promise.withResolvers.js'); // Specification: https://tc39.es/ecma262/#sec-promise.withResolvers +require('./Promise.try.js'); // Specification: https://tc39.es/ecma262/#sec-promise.try // expose Promise to global. globalThis.Promise = Promise;