我有一个进程,我必须向服务器发送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();
}
答案 0 :(得分:1)
scheduler.stop().then(setQuestionStatus).then(scheduler.start);
我的问题是,当以这种方式编写时,setQuestionStatus和scheduler.start都会在scheduler.stop解析后立即调用,而不是在链中的每个项目都已解析之后调用。
这是在早期版本的jQuery中发现的丑陋的非standard行为。您可以使用then
将副本更新为1.8+,或使用pipe
method代替。