2016-04-16 12 views
1

私は配列を持っているので、それぞれの約束事を作成して約束を別の配列に追加します。私はそれらの約束をPromise.allに渡して、彼らが完了するのを待つ。私がしたいのは、それぞれに遅延を追加して、その実行を延期することです。私の約束ザッツPromiseJSで延期された約束

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

は、ここに私のコードです。その後、Iループプロモーションの配列を通って、約束の配列に追加します:

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分後、3分後2分後など。

これはPromiseJSで可能ですか?

答えて

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

    }); 
} 

を追加しました:

あなたは約束を返す関数を返す遅延関数を作成することができます。だから、thenチェーンの遅延パラメータでこの関数を呼び出すことができます。

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

Node.jsには、 'window'オブジェクトがありません。 – alexmac

+0

は 'window'を削除しました – ykaragol

+1

私はPromiseJSに解決策があることを望んでいました。私はこれを試してみましょう、私は彼らが異なる時を持っているように関数に '遅延 'を渡す必要があるでしょう。 – BugHunterUK