मेरे पास एक स्ट्रीम है जिसे मैं data
, error
, और end
ईवेंट सुनकर संसाधित करता हूं, और मैं पहली स्ट्रीम में प्रत्येक data
ईवेंट को संसाधित करने के लिए एक फ़ंक्शन को कॉल करता हूं। स्वाभाविक रूप से, डेटा प्रोसेसिंग फ़ंक्शन अन्य कॉलबैक को कॉल करता है, जिससे इसे अतुल्यकालिक बना दिया जाता है। तो स्ट्रीम में डेटा संसाधित होने पर मैं अधिक कोड निष्पादित करना कैसे शुरू करूं? धारा में end
ईवेंट के लिए सुनना मतलब नहीं है कि एसिंक्रोनस data
प्रसंस्करण कार्य समाप्त हो गए हैं।एक स्ट्रीम समाप्त होने के बाद एसिंक्रोनस कोड निष्पादित करने के लिए कैसे सुनिश्चित किया जाता है?
मैं कैसे सुनिश्चित कर सकता हूं कि जब मैं अपना अगला कथन निष्पादित करता हूं तो स्ट्रीम डेटा प्रोसेसिंग फ़ंक्शन समाप्त हो जाते हैं?
function updateAccountStream (accountStream, callThisOnlyAfterAllAccountsAreMigrated) {
var self = this;
var promises = [];
accountStream
.on('data', function (account) {
migrateAccount.bind(self)(account, finishMigration);
})
.on('error', function (err) {
return console.log(err);
})
.on('end', function() {
console.log("Finished updating account stream (but finishMigration is still running!!!)");
callThisOnlyAfterAllAccountsAreMigrated() // finishMigration is still running!
});
}
var migrateAccount = function (oldAccount, callback) {
executeSomeAction(oldAccount, function(err, newAccount) {
if (err) return console.log("error received:", err);
return callback(newAccount);
});
}
var finishMigration = function (newAccount) {
// some code that is executed asynchronously...
}
मैं कैसे सुनिश्चित करूँ कि callThisOnlyAfterAllAccountsAreMigrated
के बाद धारा संसाधित किया गया है कहा जाता है:
यहाँ एक उदाहरण है?
क्या यह वादे के साथ किया जा सकता है? क्या यह धाराओं के माध्यम से किया जा सकता है? मैं नोडज के साथ काम कर रहा हूं, इसलिए अन्य एनपीएम मॉड्यूल का संदर्भ देना सहायक हो सकता है।
, 'end' घटना, सुंदर उपयोगी प्रतीत होता है के रूप में उस बिंदु जहाँ आप कितने नौकरियों अभी भी चल रहे तलाश शुरू करने की आवश्यकता है , ताकि जब आप और नहीं छोड़े तो आप अंतिम कॉलबैक ट्रिगर कर सकते हैं। – Bergi
@ बरगी अच्छा बिंदु, मैंने स्पष्ट किया है कि मैं क्या प्राप्त कर रहा था। – Brad
@ ब्रैड मुझे लगता है कि आपका समाधान जो वादे का उपयोग करता है और 'पठनीय' घटना उपरोक्त मेरे समाधान से अधिक प्रभावी है। क्या आप एक कोडिंग उदाहरण जोड़ना चाहते हैं? वादे थोड़ा मुश्किल हैं, इसलिए प्रश्न के कोड पर कार्रवाई में वादे देखना उपयोगी होगा ... – modulitos