2016-10-28 5 views
0

私は要素の配列を持っていますvar arr = [1, 2, 3, 4, 5, 6, 7, 8]。私が望むのは、すべての要素を取り、いくつかのものを行い、もう片方を取ることです。私は物事が並行して行われることを望んでいない。例えばノードQ - Qを持つハンドル配列

:私はQでこれを行うことができますどのように

arr.forEach(function(d){ 
    //send 'd' through HTTP 
    //if send is success wait 1000 resend the same.  
}); 

答えて

1

アイテムの配列を連続して処理される約束事の配列にするには、reduceを使用できます。ここで

var Q = require('q'); 

var arr = [1, 2, 3, 4, 5, 6, 7, 8]; 

var lastPromise = arr.reduce(function(promise, item) { 
    return promise.then(function() { 
     return someFunc(item); 
    }); 
}, Q.resolve()) 


lastPromise.then(function() { 
    console.log('some message'); 
}) 
.catch(function(error) { 
    console.log('some error'); 
}); 

someFuncはあなたの項目を処理している、これは

var item = 'item1'; 

someFunc(item).then(function(result) { 
     console.log("The task finished."); 
}) 
.catch(function(error) { 
     console.log(error); 
}); 

arr.reduce()二つの引数、あなたは彼らがreduce()に2つ目の引数を渡す気づくコールバックや初期value.Ifを取るように、それは今呼ぶと言います配列内の各要素の指定されたコールバックコールバックには2つの引数があります。最初の引数は最初の引数で、2番目の引数は配列の最初の要素です。次回は、最初の引数はコールバックが呼び出された前回の戻り値、2番目の引数は配列の次の要素です。

詳細については、 https://joost.vunderink.net/blog/2014/12/15/processing-an-array-of-promises-sequentially-in-node-js

をご覧ください。