有人可以指出或解釋某種基於事件的設計模式,它處理等待兩個事件以完成執行操作的情況。
我有一個加載異步的模板和一個同時發生的數據庫調用。我只有在這兩項任務都完成時才需要執行響應。
我能想出的唯一解決方案是做一些醜陋的事情,比如在布爾事件中設置爲true,然後檢查它們是否全部爲真。有一個更好的方法嗎?JS節點對事件的異步處理
5
A
回答
3
有沒有簡單的方法來做到這一點,但有很多flow control libraries處理這種事情。最簡單的方法可能是保持一個全局計數器,當你開始一個異步調用時該計數器遞增,然後在完成時在回調中遞減。每個操作都可以在計數器完成時檢查計數器,如果計數器爲零,則會觸發依賴於兩者的響應。
+0
我喜歡對方的想法。很簡單。謝謝。 – Prospero 2011-05-22 08:43:04
8
我想補充一個例子無論是從克里斯的回答:
使用異步,https://github.com/caolan/async
async.parallel([
function(callback){
// query a database, lets say mongodb/mongoose
User.findOne({email: email}, function(err, user){
callback(err, user);
});
},
function(callback){
// Load a template from disk
fs.readFile('views/user.html', function (err, data) {
callback(err, data)
});
}
], function(err, results){
// Should have [user, template data]
});
或用計數器:
var user = false,
template = false,
count = 2;
function build_user_view(){
// user, template should be available
}
User.findOne({email: email}, function(err, userDoc){
user = userDoc;
--count || build_user_view();
});
fs.readFile('views/user.html', function (err, data) {
template = data;
--count || build_user_view();
});
+0
優秀的例子 - 謝謝 – 2011-05-27 12:50:58
相關問題
- 1. 處理異步http調用節點js
- 2. 節點異步和異常處理
- 3. 節點js異步調用
- 4. 節點:處理異步大自然
- 5. 節點JS Express模塊是否異步處理請求?
- 6. 處理CLGeocoder(iOS5)中的異步事件
- 7. 事務和異步處理
- 8. 爲什麼異常處理不能處理異步事件?
- 9. 從異步方法中處理事件
- 10. 在UI中處理異步事件
- 11. 等待事件處理程序異步
- 12. 異步處理中繼器事件
- 13. XLib異步事件處理(沒有XBC)
- 14. 未處理的「錯誤」事件與FS在節點JS
- 15. 節點JS +錯誤:聽EADDRINUSE +未處理的「錯誤」事件
- 16. CouchDb未處理的'錯誤'事件 - 節點js
- 17. 節點異常處理
- 18. 節點JS異步工作不
- 19. 節點JS - 數據庫調用異步?
- 20. 節點JS異步 - 防止主回調
- 21. MySQL節點JS異步問題
- 22. 異步節點JS查詢連接
- 23. 節點JS異步數據庫調用
- 24. 使用異步與http.get,節點JS
- 25. 節點js異步函數和線程
- 26. 節點js多個http異步請求
- 27. 節點js異步回調問題
- 28. 防止父節點也處理事件
- 29. 與節點的異步處理的性質 - WriteFile的回調
- 30. 異步處理事件處理程序嗎?
好像他們不應該是平行的異步事件,然後除非我失去了一些東西。我只是做事件1 - >事件1回調 - >事件2 - >事件2回調 - >數據庫插入 – 2011-05-21 20:46:51
這是一個請求響應....解析模板 - >呈現頁面< - 查詢數據庫....我知道它有點微不足道,因爲解析總是更快,但這是一個學習問題。 – Prospero 2011-05-24 16:29:06