链接jQuery承诺/延迟

时间:2013-08-22 10:04:28

标签: javascript jquery jquery-deferred promise

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

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

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

但似乎应该有一种更简单的方法来编写它,例如:

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

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

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


对于您的信息,scheduler.stop和setQuestionStatus都使用模式返回一个promise:

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

1 个答案:

答案 0 :(得分:1)

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

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

这是在早期版本的jQuery中发现的丑陋的非standard行为。您可以使用then将副本更新为1.8+,或使用pipe method代替。