Javascript 允诺中的延期承诺
我有一个数组,我循环创建每个承诺,然后将承诺添加到另一个承诺数组中。然后我将这些承诺传递给Promise.all,并等待它们完成。我想做的是给每一个添加一个延迟,这样它们的执行就被推迟了 这是我的密码:Javascript 允诺中的延期承诺,javascript,node.js,Javascript,Node.js,我有一个数组,我循环创建每个承诺,然后将承诺添加到另一个承诺数组中。然后我将这些承诺传递给Promise.all,并等待它们完成。我想做的是给每一个添加一个延迟,这样它们的执行就被推迟了 这是我的密码: function updateStatus(message) { return new Promise(function(fulfill, reject) { var params = { status: message }; twitter.post('
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);
});
});
}
这是我的承诺。之后,我循环浏览一系列促销活动,并将它们添加到承诺数组中:
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(...);
fetchPromotions.then(函数(促销){
var承诺=[];
对于(变量i=0;i<0.length;i++){
promises.push(updateStatus(promotion[i].text));
}
返回承诺。全部(承诺);
}).然后(…);
然后我使用Promise.all()
等待它们完成
我想做的是给每个承诺加上一个延迟。第一个马上跑,第二个1分钟后,第三个2分钟后,等等
PromiseJS是否可以这样做?您是否尝试使用
添加:
您可以创建一个延迟函数,该函数返回一个承诺函数。因此,您可以在处使用延迟参数调用此函数,然后
链:
function delay(delayInMs){
return function (){
return new Promise(function(resolve, reject){setTimeout(resolve,delayInMs);});
}
}
您可以使用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));
函数生成(延迟,id){
返回新承诺((解决、拒绝)=>{
设置超时(()=>{
解析(`Promise${id}与${delay}delay`);
},延误);
});
}
常量承诺=[];
for(设i=0;i<5;++i){
promises.push(生成(i*1000,i));
}
//等待4s,因为这是最长的计时器
然后((数据)=>console.log(数据));
Node.js,没有window
对象。我有点希望PromiseJS有一个解决方案。我将尝试一下,我需要将delay
传递到函数中,因为它们有不同的时间。
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));