आपका मुद्दा वादे के साथ झूठ नहीं है, यह async
के आपके उपयोग के साथ निहित है।
async.each(items, handler, finalCallback)
handler
items
सरणी के प्रत्येक आइटम पर लागू होता है। 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);
}
)
स्रोत
2013-12-16 19:00:44
'Q.all' का उपयोग करके सही काम करता है, धन्यवाद! – dzm
महान आप 'Q.all' समाधान उल्लेख – Krym
हॉट कोड। निश्चित रूप से मजेदार और लाभ के लिए इसका उपयोग करेंगे। :) – Antoine