Promise.defer标准?
Promise.defer standard?
我在使用 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
Promise.defer
曾经是一个建议,但决定不将其包含在规范中,而是包含使用 the revealing constructor pattern.
的 promise 构造函数
它在 Firefox 和 Chrome 中实现,后来从 Chrome 中删除。它不是标准,但曾一度是提案。
您对 promise 构造函数的使用在设计时作为用例得到明确支持。
委员会决定使用 promise 构造函数的原因是因为它默认防止同步 throw
s:
new Promise((resolve, reject) => {
thisThrowsSynchronously();
});
如果 promise 构造函数没有这样做 - 您可能必须在每个 promise 返回函数调用上进行 .catch
和 } catch(e) {
,这可能会令人沮丧。 promise 构造函数建立了一个不变量,其中 .catch
就足够了。
我还想指出,除了转换回调 API 之外 - 我可以用一只手数出我使用 promise 构造函数的次数。通常,您的代码应该具有接近于零的延迟或承诺构造函数的使用。
我在使用 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
Promise.defer
曾经是一个建议,但决定不将其包含在规范中,而是包含使用 the revealing constructor pattern.
它在 Firefox 和 Chrome 中实现,后来从 Chrome 中删除。它不是标准,但曾一度是提案。
您对 promise 构造函数的使用在设计时作为用例得到明确支持。
委员会决定使用 promise 构造函数的原因是因为它默认防止同步 throw
s:
new Promise((resolve, reject) => {
thisThrowsSynchronously();
});
如果 promise 构造函数没有这样做 - 您可能必须在每个 promise 返回函数调用上进行 .catch
和 } catch(e) {
,这可能会令人沮丧。 promise 构造函数建立了一个不变量,其中 .catch
就足够了。
我还想指出,除了转换回调 API 之外 - 我可以用一只手数出我使用 promise 构造函数的次数。通常,您的代码应该具有接近于零的延迟或承诺构造函数的使用。