我有一个数组,我循环创建每个的承诺,然后将承诺添加到另一个承诺数组。然后我将这些承诺传递给Promise.all
并等待它们完成。我想要做的是为每个延迟添加一个延迟,以便延迟执行。
这是我的代码:
function updateStatus(message) {
return new Promise(function(fulfill, reject) {
var params = { status: message };
twitter.post('statuses/update', params, function(error, tweet, response) {
if(error) reject(error);
else fulfill(tweet);
});
});
}
这是我的承诺。稍后我会遍历一系列促销并将它们添加到promises数组中:
fetchPromotions.then(function(promotions) {
var promises = [];
for(var i=0; i < promotions.length; i++) {
promises.push(updateStatus(promotion[i].text));
}
return Promise.all(promises);
}).then(...);
然后我等待他们使用Promise.all()
完成。
我想做的是为每个承诺添加延迟。所以第一次运行,第二次运行1分钟,第二次运行2分钟等等。
PromiseJS可以实现吗?
答案 0 :(得分:3)
您可以使用 setTimeout 功能为每个承诺设置延迟。
function generate(delay, id) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Promise ${id} with ${delay} delay`);
}, delay);
});
}
const promises = [];
for (let i = 0; i < 5; ++i) {
promises.push(generate(i * 1000, i));
}
//Wait 4s because it's the longest timer
Promise.all(promises).then((data) => console.log(data));
答案 1 :(得分:0)
您是否尝试使用setTimeout?
function updateStatus(message) {
return new Promise(function(fulfill, reject) {
setTimeout(function(){
var params = { status: message };
twitter.post('statuses/update', params, function(error, tweet, response) {
if(error) reject(error);
else fulfill(tweet);
});
}, YOUR_DELAY);
});
}
<强>增加:强>
您可以创建一个延迟函数,该函数返回一个返回promise的函数。因此,您可以使用then
链上的延迟参数调用此函数:
function delay(delayInMs){
return function (){
return new Promise(function(resolve, reject){setTimeout(resolve,delayInMs);});
}
}