2013-03-09 62 views
0

什麼是快:什麼是更快的基於事件或延遲的處理?

Event.once('some_event', function() { // wait until an event fired from somewhere 
    defer.resolve('resolved') 
}) 
... 
// somewhere else 
Event.emit('some_event') 

或smth.like:

defer = doSmthDeferred(); // to get the deferred resolved/rejected from somewhere else 
... 
// somewhere else 
doSmthDeferred = function() { 
    defer 
    if ... 
    defer.resolve(); 
    else 
    defer.reject(); 
} 

即:什麼是更好 - 事件處理或嵌套的承諾/ deferreds處理?是基於事件處理的承諾/延期?

回答

1

這幾乎是一個紅色的鯡魚。事件和承諾解決之間的速度差異幾乎總是很小。

事件是爲發生很多次的事情而設計的。例如請求到達Web服務器或用戶單擊按鈕。當你將它們用於異步操作時,它們會變得雜亂無章,因爲它們不能正確地支持組合,即,很難等待兩個事件都發生 承諾是專爲異步操作(如從服務器請求網頁)。他們只能解決一次,所以不適合舉辦類似事件。如果您有多個並行或串行的異步操作,承諾使得編寫它們非常容易。如果你正在尋找一個很好的承諾庫,我建議你退房Q

+0

謝謝!構圖屬性很好知道,在承諾中真的很有特色。 我現在設計一個關於鎖定/排隊消息的小項目的模塊,並且我無法克服這個問題,只能採用一種風格:基於承諾,所以有一個地方需要發出一個事件(當一個元素被解鎖時,我需要通知隊列將鎖授予隊列中的另一個元素,其中隊列具有此事件的觸發器)。 那麼通常還是應該只做一種風格?你怎麼想? – static 2013-03-10 05:25:23

+1

一般而言,適當地混合和匹配兩種風格是很好的。儘管如此,嘗試並向外界展示一致的界面。如果你覺得你需要同時看到外部世界,你應該寫兩個單獨的模塊,每個模塊都做一半的東西。在內部,對於你所描述的,你可能不想要一個完整的事件系統,你可能只想定義一個函數'processQueue',並在元素解鎖時調用'processQueue'。 – ForbesLindesay 2013-03-12 17:13:34