我正在与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
答案 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构造函数的用法。