Promise.defer标准?

Noi*_*art 3 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*aum 5

Promise.defer是一个建议,但决定不在规范中包含它,而是包括使用揭示构造函数模式的promise构造函数.

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

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

委员会决定使用promise构造函数的原因是因为它throw默认情况下防止同步s:

new Promise((resolve, reject) => {
    thisThrowsSynchronously();
}); 
Run Code Online (Sandbox Code Playgroud)

如果promise构造函数没有这样做 - 你将不得不潜在地 .catch} catch(e) {每个承诺返回函数调用,这可能是令人沮丧的.promise构造函数建立了一个.catch足够的不变量.

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