gpt4 book ai didi

Javascript Promises : Chain same promise n times, 然后做其他事情

转载 作者:数据小太阳 更新时间:2023-10-29 06:00:24 25 4
gpt4 key购买 nike

我有一个返回 promise 的函数,它执行一些异步操作,我们称它为 functionToRepeat()

我正在尝试编写函数 repeatFunction(amount) ,这样它将启动 promise ,等待完成,再次启动,等待完成,等等给定的次数.这个 repeatFunction(amount) 也应该是 thenable,这样我就可以在它执行后链接其他东西。

这是我的尝试:

function functionToRepeat(){
let action = new Promise(function(resolve,reject){
setTimeout(function(){
console.log("resolved!");
resolve()}
,1000);
})
return action
}

function repeatFunction(amount) {
if(amount==0){
return Promise.resolve();
}
return functionToRepeat().then(function(){
repeatFunction(amount-1);
});
}

repeatFunction(5).then(function(){
console.log("DONE!");
})

这成功地链接了我的 promise (或者它接缝处,我在控制台中每秒得到一个“已解决!”)。但是,我尝试在 repeatFunction(5) 之后链接的 .then() 发生在第一个 promise 结束之后,而不是在所有 5 个 promise 结束之后!

所以在我的控制台中我得到:

解决了!完毕!解决!解决!解决!解决了!

我做错了什么,我应该改变什么?

最佳答案

简单的怎么样:

function repeat(func, times) {
var promise = Promise.resolve();
while (times-- > 0) promise = promise.then(func);
return promise;
}

测试时:

function oneSecond() {
return new Promise(function (resolve, reject) {
setTimeout(function () {
console.log("tick");
resolve();
}, 1000);
});
}

repeat(oneSecond, 5).then(function () {
console.log("done");
});

此输出在 5 秒内产生:

tick
tick
tick
tick
tick
done

关于Javascript Promises : Chain same promise n times, 然后做其他事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41020872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com