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
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构造函数的用法.