【发布时间】:2023-01-18 00:03:14
【问题描述】:
我一直在使用 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 API“建议”始终将它们用作返回值,而不是作为您可以访问或调用的对象。换句话说,迫使我们将它们视为返回值,而不是我们可以访问的对象或我们可以调用的函数,或者我们可以用变量引用或作为参数传递的东西,等等。如果你开始使用承诺作为任何其他对象,你可能会最终需要像你的问题一样从外部解决它......话虽如此,我也认为应该有一种正式的方式来做到这一点......而 Deferred 似乎只是我的一种解决方法。
标签: javascript promise es6-promise