【发布时间】:2014-11-26 19:36:31
【问题描述】:
我一直在使用 ES6 Promise。
通常,Promise 是这样构造和使用的
new Promise(function(resolve, reject){
if (someCondition){
resolve();
} else {
reject();
}
});
但为了灵活性,我一直在做类似下面的事情来解决问题。
var outsideResolve;
var outsideReject;
new Promise(function(resolve, reject) {
outsideResolve = resolve;
outsideReject = reject;
});
后来
onClick = function(){
outsideResolve();
}
这很好用,但有更简单的方法吗?如果没有,这是一个好习惯吗?
【问题讨论】:
-
我认为没有其他方法。我相信已指定传递给
Promise的回调必须同步执行以允许“导出”这两个函数。 -
这对我来说就像你写的一样。所以就我而言,这是“规范”的方式。
-
我认为将来应该有一种正式的方式来实现这一点。我认为这个功能非常强大,因为您可以等待来自其他上下文的值。
-
每当他们想出一个合适的解决方案来解决这个问题时,我希望他们也能让它适用于嵌套的 Promise,其中一些可能会重复出现。
-
我认为 Promise API“建议”始终将它们用作返回值,而不是您可以访问或调用的对象。换句话说,迫使我们将它们视为返回值,而不是我们可以访问的对象或我们可以调用的函数,或者我们可以通过变量引用或作为参数传递的东西等。如果您开始将 Promise 用作任何其他对象,您可能会最终需要像你的问题一样从外部解决它......话虽如此,我也认为应该有一种正式的方式来做到这一点......而 Deferred 对我来说似乎只是一种解决方法。
标签: javascript promise es6-promise