0

サーバーに ajax リクエストを送信する必要があるプロセスがありますが、ajax リクエストが開始される前にスケジューラを停止し、リクエストが完了したらスケジューラを再起動する必要があります。

次のコードを使用してこれを機能させました。

scheduler.stop()
         .done(function () {
                 setQuestionStatus().done(scheduler.start);
               });

しかし、これを次のように簡単に書く方法があるはずです。

scheduler.stop().then(setQuestionStatus).then(scheduler.start); 

私の問題は、このように記述すると、チェーン内の各項目が解決された後ではなく、scheduler.stop が解決されるとすぐに setQuestionStatus と scheduler.start の両方が呼び出されることです。

2番目の例で私が間違っていることを誰か教えてもらえますか?


参考までに、scheduler.stop と setQuestionStatus の両方が、次のパターンを使用して promise を返します。

var setQuestionStatus = function(){
  return $.Deferred(function (def) {
    // Do stuff
    def.resolve();
  }).promise();
}
4

1 に答える 1

1
scheduler.stop().then(setQuestionStatus).then(scheduler.start); 

私の問題は、このように記述した場合、setQuestionStatus と scheduler.start の両方が、チェーン内の各項目が解決された後ではなく、scheduler.stop が解決されるとすぐに呼び出されることです。

これは、以前のバージョンの jQuery に見られた醜い非標準の動作です。を使用するためにコピーを 1.8+ に更新するか、代わりにメソッドthenを使用してください。pipe

于 2013-08-22T10:12:06.740 に答える