2

Deferredの実装があるjavascriptのレッスンに従おうとしています。これがコードのコアです

getData = function (options) {
  return $.Deferred(function (def) {

    var results = options.results;                    

    getFunction({
      success: function (smt) {                                
        results("test");
        def.resolve(results);
        debugger;
      },
      error: function (response) {                                    
        def.reject();
      }
    }); 

  }).promise();
},

今の質問は..私がこの関数を外部から呼び出すとき:

$.when(somthing.getData(options)).
   done(alert(options.results));

debugger;

最初に$.when呼び出しの外側のデバッガーに到達し、次にDeferredオブジェクト内のコールバックSUCCESS関数内のデバッガーにタッチします。

わかりません..def.resolve(results)に達したときだけ約束をするべきではありませんか?...

4

1 に答える 1

1

最後の行を除いてすべて正しいです:

$.when(somthing.getData(options)).done(alert(options.results));
debugger;

ここですぐにalert( and )を呼び出します。debuggerあなたが望むのは、次のdoneようにコールバックを渡すことです:

$.when(somthing.getData(options))
.done(function(){
    alert(options.results);
    debugger;
});
于 2013-03-05T09:22:24.533 に答える