Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 允诺中的延期承诺_Javascript_Node.js - Fatal编程技术网

Javascript 允诺中的延期承诺

Javascript 允诺中的延期承诺,javascript,node.js,Javascript,Node.js,我有一个数组,我循环创建每个承诺,然后将承诺添加到另一个承诺数组中。然后我将这些承诺传递给Promise.all,并等待它们完成。我想做的是给每一个添加一个延迟,这样它们的执行就被推迟了 这是我的密码: function updateStatus(message) { return new Promise(function(fulfill, reject) { var params = { status: message }; twitter.post('

我有一个数组,我循环创建每个承诺,然后将承诺添加到另一个承诺数组中。然后我将这些承诺传递给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);
        });
    });
}
这是我的承诺。之后,我循环浏览一系列促销活动,并将它们添加到承诺数组中:

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));