PromiseJS中的延期承诺

我有一个数组,我通过创build每个承诺,然后将承诺添加到另一个承诺数组。 然后我将这些承诺传递给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可以吗?

您可以使用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)); 

你尝试使用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); }); } 

添加:

你可以创build一个延迟函数,返回一个返回promise的函数。 所以你可以在链上用delay参数调用这个函数:

  function delay(delayInMs){ return function (){ return new Promise(function(resolve, reject){setTimeout(resolve,delayInMs);}); } }