2012-03-15 7 views
1

jQuery遅延を使用していて、奇妙な動作に気付いています。

はここにフィドルを参照してください:http://jsfiddle.net/wKTgP/1/

私は約束

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

のセットを呼び出すために$ .whenを使用する場合promise1が 'こんにちは' の通知を送信し、promise2は '世界' を送信した場合、私が手2つのメッセージボックス:

0 'ハロー未定義'

"こんにちは、世界

最初の通知は明らかにpromise1からのメッセージ、およびpromise2 hasntはまだ何も送っ示しています...が、第2の通知は私がpromise1がAGAIN「こんにちは」送信したことを思わせる、とpromise2はじめて「世界」を発信しています...

この話は何ですか?

+0

最初の約束はpromise2を達成した時に「達成」の状態のままです。 –

+0

ええ - これは私が 'notify'と認識している方法の問題だと考えています - 命名(notify)は 'イベント'型のメカニズムを意味しています。実際に 'progress state 'を返します。今私はそれを理解します、それはより理にかなっています。 – Adam

+0

私はそれを前に使用していませんでしたが、進捗状況の中で起動されたときに通知をクリアするメカニズムがありますか?私もそれを理解しようとしています。 –

答えて

4

は、すでに進行約束に進捗ハンドラを装着しているときに、コールバックが最新の進捗値ですぐに呼ばれている、ということを覚えておいてください:

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

すぐに「hello」を記録します。

今、$ .whenは複合的な約束を返します。したがって、そのコンポーネントの1つが進行するたびに、コンパウンドの約束が進行します。

最新の通知値が「メモリ内」に保持され、コンポーネントの1つが進行するときに$によって返される複合語の約束が与えられたとすると、進捗値はすべての参加の約束は、値を進行場合でも、唯一のはを進行するとき:

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

ありがとうジュリアン - 今、完璧な意味合いがあります。 – Adam

関連する問題