Bạn có thể xâu chuỗi hàng đợi và tự động gọi lại, nhưng nó lại có nhiều lông. May mắn là có rất nhiều thư viện để giúp bạn. Tôi không phải là người hâm mộ của phương pháp phản đối vì đôi khi rất khó để biết mà gọi lại chưa được kích hoạt.
Tôi là người hâm mộ của phong cách "Trì hoãn". Chẳng hạn như thư viện này: https://github.com/heavylifters/deferred-js
Hoặc cho một API hoàn toàn khác nhau, xem Step.js https://github.com/creationix/step
Hoặc xem ở đây để libs vi khác mà gói gọn vấn đề này: http://microjs.com/#defer
Hoặc chỉ cần làm điều đó chính bạn bằng cách gọi thiết lập một số trạng thái bên ngoài, và sau đó gọi một hàm chia sẻ done
trong mọi cuộc gọi lại.
var complete = {
first: false,
second: false
};
doFirstAsync(function() {
complete.first = true;
allDone();
});
doSecondAsync(function() {
complete.second = true;
allDone();
});
var allDone = function() {
if (complete.first && complete.second) {
alert("done with all async!");
}
};
Hầu hết các thư viện ở trên đều làm việc này cho bạn dựa trên phương pháp tương tự. Nhưng chỉ trừu tượng và khái quát hóa. Sự khái quát hóa đó là nơi mọi thứ có thể có lông, vì bạn có các mảng hàm callbacks bay khắp mọi nơi. Đó là chương trình chức năng thú vị, nhưng nó có thể phức tạp về khái niệm.
Nếu bạn đang thực hiện việc này, hãy sử dụng lib có API bạn thích.
Nguồn
2013-01-13 00:57:14
Đưa một cái nhìn tại pubsub.js nó thực sự hữu ích cho việc kết nối các sự kiện với nhau. Đăng ký và xuất bản chỉ đồng bộ hóa qua từng sự kiện được đăng ký theo thứ tự (nếu bạn gắn cờ nó là đồng bộ hóa). https://github.com/mroderick/PubSubJS – Gats
Đã thêm rằng làm nhận xét vì đó không phải là câu trả lời trực tiếp. – Gats