0

我有一个过程,我必须向服务器发送 ajax 请求,但需要在 ajax 请求开始之前停止调度程序,然后在请求完成后重新启动调度程序。

我使用以下代码完成了这项工作:

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

不过好像应该有更简单的写法,比如:

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

我的问题是,以这种方式编写时,一旦 scheduler.stop 已解决, setQuestionStatus 和 scheduler.start 都会被调用调用,而不是在链中的每个项目已解决之后。

谁能告诉我在第二个例子中我做错了什么?


供您参考, scheduler.stop 和 setQuestionStatus 都使用以下模式返回一个承诺:

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 回答