在我看来两人做的事情是一样的。
医生:
发布于 2012-09-16 15:33:13
deferred.then()似乎允许您为成功和失败传递两个单独的回调,而deferred.always()则接受n数量的回调,这些回调都将被调用,而不管初始事件的结果如何。
我认为在初始事件的成功/失败不重要的情况下使用deferred.always()
发布于 2012-09-16 15:34:37
使用.then(),您可以为解析$.Deferred (done)提供单独的回调(done),为拒绝$.Deferred (fail)提供另一个回调。
另一方面,.always()允许您提供一个总是被执行的回调,无论$.Deferred是否已被解析或拒绝。换句话说,在此回调中,AJAX调用是否失败或是否已成功执行并不重要。
当我希望代码每次运行时,我倾向于将代码放入.always()中,并且不依赖于$.Deferred是否成功地被解析。例如,清除AJAX加载指示符或隐藏进度条。使用.then(),您可以得到如下内容:
$.get("/some/url").then(function () { // done callback
$(".progress-bar").hide();
}, function () { // fail callback
$(".progress-bar").hide();
});如果使用.always(),则只需要一个回调,因为您总是希望隐藏进度条,不管$.Deferred是解决了还是拒绝了:
$.get("/some/url").always(function () {
$(".progress-bar").hide();
});发布于 2012-09-24 15:15:29
在jQuery 1.8之前:.always(fn)等同于.then(fn, fn)
在jQuery 1.8中,.always(fn)与.then(fn, fn)相似,但返回的内容不同(详见http://api.jquery.com/deferred.then/ )。
https://stackoverflow.com/questions/12448171
复制相似问题