Promise.defer标准?

时间:2016-08-19 01:09:41

标签: javascript promise deferred

我正在与Promises合作,并喜欢像这样使用它:

function Deferred() {
    this.resolve = null;
    this.reject = null;
    this.promise = new Promise(function(resolve, reject) {
        this.resolve = resolve;
        this.reject = reject;
    }.bind(this));
    Object.freeze(this);
}

function somethingAsync() {

    var deferred = new Deferred();

    // do stuff then deferred.resolve();

    return deferred.promise;
}

我刚刚在Firefox Promise.defer()中遇到了同样的事情,这个标准是什么?或者只针对Firefox?我甚至无法在Firefox的Promise文档中找到它 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

1 个答案:

答案 0 :(得分:5)

Promise.defer在某一时刻是一个建议,但决定不在规范中包含它,而是包含使用the revealing constructor pattern的promise构造函数。

它已在Firefox和Chrome中实施,后来从Chrome中删除。它不是一个标准,而是一个提案。

在设计时,您明确支持使用promise构造函数作为用例。

委员会决定使用promise构造函数的原因是因为它默认防范同步throw

new Promise((resolve, reject) => {
    thisThrowsSynchronously();
}); 

如果promise构造函数没有这样做 - 你可能必须在每个promise返回函数调用时.catch} catch(e) {,这可能令人沮丧。 promise构造函数建立一个.catch就足够的不变量。

我还想指出,在转换回调API之外 - 我可以计算我一方面使用promise构造函数的次数。通常,您的代码应该具有接近零延迟或promise构造函数的用法。