あなたの問題は約束の嘘ではなく、async
の使用にあります。
async.each(items, handler, finalCallback)
は、items
アレイのすべての項目にhandler
を適用します。 handler
関数は非同期です。つまり、コールバックが渡され、処理が完了したときに呼び出す必要があります。すべてのハンドラが終了すると、最後のコールバックが呼び出されます。
は、ここでは、あなたの現在の問題を解決したい方法は次のとおりです。
var handler = function (item, cb) {
saveItem(item)
.then(
function() { // all is well!
cb();
},
function (err) { // something bad happened!
cb(err);
}
);
}
var finalCallback = function (err, results) {
// ...
}
async.each(items, handler, finalCallback);
しかし、あなたは、このコードの特定の部分のためにasync
を使用する必要はありません。一人での約束は特に、非常にうまくこの仕事を埋めますQ.all()
:
// Create an array of promises
var promises = items.map(saveItem);
// Wait for all promises to be resolved
Q.all(promises)
.then(
function() { // all is well!
cb();
},
function (err) { // something bad happened!
cb(err);
}
)
「Q.all」を使用しています。ありがとう! – dzm
お元気ですか?Qall解決策 – Krym
ホットコード。間違いなく楽しみと利益のためにこれを使用します。 :) – Antoine