我做的是承诺,我更喜欢像这样使用它:
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;
}
不过,我刚在火狐浏览器(FirefoxPromise.defer()
)中发现了同样的东西,这是标准吗?还是只针对火狐?我无法在Firefox Objects/Promise的承诺文档中找到它
发布于 2016-08-19 01:44:07
Promise.defer
曾经是一个建议,但它决定不将它包含在规范中,而是包含使用the revealing constructor pattern的允诺构造函数。
它是在Firefox和Chrome中实现的,后来又从Chrome中删除。这不是一个标准,但曾经是一项建议。
承诺构造函数的使用在设计时被显式地支持为用例。
委员会之所以决定采用允诺构造函数,是因为它在默认情况下防止同步throw
:
new Promise((resolve, reject) => {
thisThrowsSynchronously();
});
如果允诺构造器没有这样做,您将不得不在每次承诺返回函数调用时都可能使用.catch
和} catch(e) {
,这可能会令人沮丧。允诺构造函数建立一个不变量,其中.catch
是充分的。
我还想指出,除了转换回调API之外,我一方面可以计算我使用了承诺构造函数的次数。通常,您的代码应该有接近零延迟或承诺构造函数的用法。
https://stackoverflow.com/questions/39029684
复制相似问题