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
ストリームが処理された後に呼び出されるようにするにはどうすればよいですか?
これは約束で行うことができますか?スルーストリームで実行できますか? 私は Nodejs を使用しているので、他の npm モジュールを参照すると役立つ場合があります。