Tôi có một luồng mà tôi xử lý bằng cách lắng nghe các sự kiện data
, error
và end
và tôi gọi hàm để xử lý từng sự kiện data
trong luồng đầu tiên. Đương nhiên, hàm xử lý dữ liệu gọi các callback khác, làm cho nó không đồng bộ. Vậy làm cách nào để tôi bắt đầu thực thi thêm mã khi dữ liệu trong luồng được xử lý? Lắng nghe sự kiện end
trong luồng KHÔNG có nghĩa là chức năng xử lý data
không đồng bộ đã hoàn tất.Làm cách nào để đảm bảo mã không đồng bộ được thực thi sau khi luồng xử lý xong?
Làm cách nào để đảm bảo rằng các chức năng xử lý dữ liệu luồng được hoàn thành khi tôi thực hiện câu lệnh tiếp theo?
Dưới đây là một ví dụ:
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...
}
Làm thế nào để đảm bảo rằng callThisOnlyAfterAllAccountsAreMigrated
được gọi SAU suối đã được xử lý?
Điều này có thể được thực hiện với lời hứa không? Nó có thể được thực hiện thông qua các luồng không? Tôi đang làm việc với Nodej, vì vậy việc tham khảo các mô-đun npm khác có thể hữu ích.
Đối với tôi, 'cái end' sự kiện có vẻ khá hữu ích, vì đó là điểm mà bạn cần phải bắt đầu tìm kiếm có bao nhiêu công việc vẫn đang chạy , để bạn có thể kích hoạt cuộc gọi lại cuối cùng khi không còn nữa. – Bergi
@Bergi Điểm tốt, tôi đã làm rõ những gì tôi đã nhận được. – Brad
@Brad Tôi nghĩ rằng giải pháp của bạn sử dụng lời hứa và sự kiện 'có thể đọc được sẽ hiệu quả hơn giải pháp của tôi ở trên. Bạn có nhớ thêm một ví dụ mã hóa không? Lời hứa là một chút khó khăn, vì vậy sẽ hữu ích khi thấy lời hứa trong hành động trên mã của câu hỏi ... – modulitos