我习惯了 Dojo 承诺,我可以在其中执行以下操作:
promise.isFulfilled();
promise.isResolved();
promise.isRejected();
有没有办法确定 ES6 承诺是否被履行、解决或拒绝?如果没有,有没有办法使用 填充该功能Object.defineProperty(Promise.prototype, ...)
?
我习惯了 Dojo 承诺,我可以在其中执行以下操作:
promise.isFulfilled();
promise.isResolved();
promise.isRejected();
有没有办法确定 ES6 承诺是否被履行、解决或拒绝?如果没有,有没有办法使用 填充该功能Object.defineProperty(Promise.prototype, ...)
?
它们不是规范的一部分,也没有一种标准的方式来访问它们,您可以使用它来获取构建 polyfill 的承诺的内部状态。但是,您可以通过创建包装器将任何标准承诺转换为具有这些值的承诺,
function MakeQueryablePromise(promise) {
// Don't create a wrapper for promises that can already be queried.
if (promise.isResolved) return promise;
var isResolved = false;
var isRejected = false;
// Observe the promise, saving the fulfillment in a closure scope.
var result = promise.then(
function(v) { isResolved = true; return v; },
function(e) { isRejected = true; throw e; });
result.isFulfilled = function() { return isResolved || isRejected; };
result.isResolved = function() { return isResolved; }
result.isRejected = function() { return isRejected; }
return result;
}
这不会像修改原型那样影响所有 Promise,但它确实允许您将 Promise 转换为暴露其状态的 Promise。