【发布时间】:2015-06-26 00:08:50
【问题描述】:
冒着听起来很愚蠢的风险:等待一个承诺达成的最有效方法是什么?假设我有承诺 A,我想创建承诺 B。B 的实现不取决于 A 的最终值。即使 A 被拒绝,它也应该继续。然而,在 A 以一种或另一种方式解决之前,该过程不应开始。
我目前的样子如下:
var prevResult;
function doStuff() {
if (prevResult) {
prevResult = promise.settle([ prevResult ]).then(function() {
return doStuff();
})
} else {
prevResult = updateDB().finally(function() {
prevResult = null;
});
}
return prevResult;
}
代码有点不明显。我也有点担心将来自结算()的一堆承诺链接在一起,看看它是如何执行不那么琐碎的协调的功能。似乎应该有一种更简单的方法来做到这一点。
【问题讨论】:
-
你的意思是你想要有两个promise,即使Promise A被拒绝,你也会忽略它并想继续?
-
@thefourtheye。是的。生成 A 和 B 的操作是独立的。它们只是不能同时发生。
-
是的,您的代码非常不明显,尤其是
prevResult = null的东西。这究竟是为了什么?doStuff是什么? -
将
prevResult设置为 null 允许进行下一个操作。我想如果我将条件设为prevResult && !prevResult.isFulfilled())并删除finally(),代码会更明显一些。这意味着履行价值不会得到 gc'ed。