2016-01-16 47 views

回答

0

您應該爲每個事件添加事件偵聽器,如果發生事件,則應將其存儲在某個可在每個事件處理程序中訪問的標誌變量中,然後檢查所有標誌是否爲真doSomething。您可以使用map來代替標誌變量,還可以創建一些幫助器函數,以便在發生所有事件時收到所有事件和回調回調,這一切都適用於您的實現方式。 我don'the認爲你可以找到更好的方法完成這項任務

+2

'承諾'真的是現在這樣做的正確方式 – Alnitak

+0

這是正確的我也想過,但由於瀏覽器的支持和理解的複雜性,我建議從包裝功能開始,以良好的界面。 –

4

Promise.all

var p1 = new Promise(function(resolve, reject) { 
    listenTo(eventA, resolve); 
}); 
var p2 = new Promise(function(resolve, reject) { 
    listenTo(eventB, resolve); 
}); 
var p3 = new Promise(function(resolve, reject) { 
    listenTo(eventC, resolve); 
}); 

Promise.all([p1, p2, p3]).then(function(value) { 
    // all three events are triggered. 
    doSomething... 
}); 
+0

沒有必要爲每個事件使用匿名函數包裝器 - 只要執行'listenTo(eventA,resolve)'等等。 – Alnitak

+0

@Alnitak,很好的建議...... – zangw

相關問題