我有一个通过侦听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 模块可能会有所帮助。