スキルアップのため、jqueryのソースコードを読んでいます。
今から、done関数に渡した関数がなぜ、Deferred.resolveによって
実行されるか説明しますので、
認識違いの部分を教えて頂けますでしょうか。
全体のソースコードです。
javascript
1const logWhenResolved = () => console.log('resolvedで実行'); 2const promise = delayHello(); 3promise.done(logWhenResolved); 4/** 5 * 1秒後にHello!を出力するDeferred対応関数。必ずresolveする 6 * 7 * @returns Promise 8 */ 9function delayHello() 10{ 11 const d = new $.Deferred; 12 setTimeout(function(){ 13 console.log('Hello!'); 14 d.resolve(); 15 }, 1000); 16 return d.promise(); 17}
以下、私の説明です。荒削りな知識のため、間違いが多々あるかもしれません。
delayHello関数内の
javascript
1const d = new $.Deferred; 2//省略 3return d.promise();
によってjQuery.Deferredオブジェクトをインスタンス化して変数dに入れる。
変数d内のpromiseオブジェクトを返す。
※promiseオブジェクトは、主にstateを返す関数とthen関数を持つもの。
javascript
1promise.done(logWhenResolved);
によって、logWhenResolvedを状態resolveに対応した
jQuery.Callbacks( "once memory" )に追加している。
一秒後、delayHello関数内の
javascript
1d.resolve();
によって、先ほどのjQuery.CallbacksのfireWith関数が
実行され、logWhenResolvedが実行される。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/02 04:23
2018/03/02 04:26
2018/03/02 18:58