Jquery 将多个done()回调链接到同一延迟承诺
简言之,我希望有一个通用回调,在成功调用ajax时总是触发,然后根据调用方法的位置提供单独的回调功能 这似乎奏效了。我的问题是,这是否是对promise对象的正确使用,是否可以安全地假设相同类型的多个promise回调总是按顺序堆叠Jquery 将多个done()回调链接到同一延迟承诺,jquery,promise,Jquery,Promise,简言之,我希望有一个通用回调,在成功调用ajax时总是触发,然后根据调用方法的位置提供单独的回调功能 这似乎奏效了。我的问题是,这是否是对promise对象的正确使用,是否可以安全地假设相同类型的多个promise回调总是按顺序堆叠 var dfd = $.Deferred(), promise = dfd.promise(); promise.done(function(){ console.log(1); }).done(function(){ console.lo
var dfd = $.Deferred(),
promise = dfd.promise();
promise.done(function(){
console.log(1);
}).done(function(){
console.log(2);
});
dfd.resolve();
这是jQuery中延迟对象的正确且有文档记录的用法。文件: 回调按添加顺序执行 它在其他promise库中的工作方式有所不同,通常是
。然后无论怎样,
都比。done
更可取(在后面的回答中解释)。然而,如果您使用jQuery,那么如果它们是同步的,它将按顺序进行堆栈
所以你的问题的直接答案是肯定的
但是,您也可以使用异步代码来实现这一点,并使用使其更好地链接
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.
});
基本上,done
添加一个处理程序并返回相同的承诺和。然后
返回上一个承诺链接的新承诺。通常,我只会使用.done
来终止链,如果希望保留返回值(函数()的参数{
)我希望你能找到这个主题;)当你说一般来说。那么是首选。无论如何做我想你指的是链接,而不是done
vsthen
一般来说?我想根据你的评论,最合适的方法是使用then()
然后加上“终止”done()
,即使在这种情况下我只处理同步代码?@Johan在使用新的promise库时,一般来说,我更喜欢然后而不是完成。另一方面,在jQuery中,使用.done
终止链是有益的-所以是的,这不是jQuery承诺的最大问题。同意。谢谢为了让我了解两者之间的区别!您所说的“它在其他promise库中的工作方式不同”是什么意思?Promises/A+也指定按调用的顺序执行回调(使用我的upvote直到澄清为止:-)@jQuery.done
中的Bergi接受回调并返回相同的承诺。在其他库中,如Q和Bluebird。done
不接受任何内容,也不返回任何内容。在jQuery中,它用于将处理程序链接到结果-在中的其他库中,终止承诺链并记录任何未经处理的拒绝-jQuery不我在承诺中很好地处理拒绝。我想这就是我的意思。