我有一个异步函数列表。我预计当第一个函数解析(或拒绝)时,我可以阻止其他函数。
例如:
function wait(ms){
return new Promise(function(resolve){
setTimeout(function(){
console.log('waited ', ms);
resolve();
}, ms);
})
}
promise1 = wait(2000);
promise2 = wait(5000);
listPromise = [promise1, promise2];
Promise.race(listPromise).then(function(){
console.log("Very first promise has resolved!");
})
实际结果是:
> waited 2000
> Very first promise has resolved!
> waited 5000
期待的结果是:
> waited 2000
> Very first promise has resolved!
答案 0 :(得分:1)
您可以向您的承诺发送令牌,以便稍后取消。
class Post
before_destroy :update_tasks
private
def update_tasks
self.tasks.update_all(post_id: nil)
end
end
以下是工作链接:https://jsfiddle.net/Lwymeoz0/
答案 1 :(得分:0)
Promise不是可以取消或停止的独立进程。如果有一个计时器在其中一个中运行,它将继续这样做,除非你自己停止它。
要解决您的特定问题,您需要跟踪当前正在运行的超时,并在解决第一个超时后清除所有其他超时。
这样的事情应该有效:
var timeoutIds = [];
function wait(ms){
return new Promise(function(resolve){
var timeoutId = setTimeout(function(){
console.log('waited ', ms);
resolve();
}, ms);
timeoutIds.push(timeoutId);
})
}
promise1 = wait(2000);
promise2 = wait(5000);
listPromise = [promise1, promise2];
Promise.race(listPromise).then(function(){
console.log("Very first promise has resolved!");
for (var i = 0; i < timeoutIds.length; i++) {
clearTimeout(timeoutIds[i]);
}
})