2012-03-15 50 views
1

我使用jQuery延遲,並且已經注意到一個奇怪的行爲。

見小提琴這裏:http://jsfiddle.net/wKTgP/1/

如果我使用$。當調用一組承諾

$.when(promise1, promise2) 
    .progress(function (message1, message2) { 
     alert(message1 + ' ' + message2); 
    }); 

如果promise1發送通知「你好」,並promise2發送「世界」,我得到兩個消息框:

'你好未定義'

「世界你好」

第一通知明顯顯示了promise1的消息,並且promise2處理不當發送任何東西......但第二個通知,讓我覺得promise1已派出「你好」一遍,promise2第一次發送'世界'...

這是怎麼回事?

+0

第一承諾仍處於狀態「實現」的時候promise2取得。 – 2012-03-15 23:04:02

+0

是的 - 我相信這是一個問題,我認爲'通知'的方式 - 命名(通知)意味着'事件'類型的機制,最好稱之爲'狀態',因爲它實際上設置'進展狀態'的延期實例。現在我明白了,它更有意義。 – Adam 2012-03-15 23:08:14

+0

我之前沒有使用它,但在進程內部激活時可能有通知清除機制?我也試圖理解它。 – 2012-03-15 23:14:47

回答

4

請記住,當你安裝一個進度處理程序已經進展的承諾,回調立即與最新進展值稱爲:

$.Deferred().notify("hello").progress(function(value) { 
    console.log(value); 
}); 

將登錄「你好」馬上。

現在,$ .when返回複合承諾。所以,每當它的一個組件發展時,複合諾言就會進步。

鑑於最新的通知值保留在「內存」中,並且$ .when返回的複合承諾在其某個組件進展時繼續進行,那麼完全有意義的是,進度值應該是所有在加入承諾進度值,即使在僅有一個進步

[ "hello", undefined ] 
[ "hello", "world" ] 
+0

感謝Julian - 現在非常有意義。 – Adam 2012-03-18 20:55:28

相關問題