简而言之,我希望有一个通用的回调,在成功的ajax调用的情况下总是触发,然后根据调用方法的位置单独的回调功能.
这似乎有效.我的问题是,如果这是对promise对象的正确使用,并且如果可以安全地假设同一类型的多个promise回调总是按顺序堆栈?
var dfd = $.Deferred(),
promise = dfd.promise();
promise.done(function(){
console.log(1);
}).done(function(){
console.log(2);
});
dfd.resolve();
Run Code Online (Sandbox Code Playgroud)
Ben*_*aum 15
这是jQuery中延迟对象的正确和记录使用.文件明确指出:
回调按添加顺序执行.
它在其他承诺库中的工作方式不同,并且通常.then是优选.done的(在后面的答案中解释).但是,如果你使用jQuery promises,如果它们是同步的,它将按顺序堆栈.
所以直接回答你的问题是肯定的.
但是,您也可以使用异步代码执行此操作,并使其链接更好.then:
promise.then(function(){
console.log(1);
}).then(function(){
console.log(2);
}).then(function(){
return $.get(...);
}).then(function(){
console.log(3); // this always executes after the $.get finishes.
});
Run Code Online (Sandbox Code Playgroud)
基本上,done添加一个处理程序并返回相同的promise并.then返回一个从最后一个链接的新promise.一般来说,我只会.done用来终止链,如果你想保留返回值(参数function(){)