【发布时间】:2015-12-17 10:07:26
【问题描述】:
我正在尝试了解 jQuery deferred/promises(使用 v1.8+)。
通过阅读文档,$.Deferred.then(...) 方法接受 doneFilter 和 failFilter 作为要执行的参数,并返回一个 Promise,我们可以使用它进行如下链接:
function doDefer() {
var $defer = $.Deferred();
doSomethingAsynchronous(
function () {
$defer.resolve();
},
function () {
$defer.reject();
}
);
return $defer.promise();
}
doDefer()
.then(function () {
return;
}, function () {
// second `then` not called
})
.then(function (b) {
// `b` is undefined, since first `then` returned without a value.
}, function () {
// fail end
});
两个问题:
- 如果遇到第一个
fail函数,为什么执行链会在doDefer()处停止?据我了解,then返回一个$.Deferred.promise(),这是第二个then函数链接(并执行)的方式。第一个链中的thendoneFilter/function/callback 总是返回(?) - 那么为什么/如何 jQuery 以不同的方式处理failFilter? - 为什么
then返回一个$.Deferred.promise(),而done/always/fail等返回一个$.Deferred?这有什么用(为什么它与then不同)?
【问题讨论】:
-
不,它工作得很好。我创建了一个小提琴:jsfiddle.net/oy95nh47/1 如果你调用“resolve”,“done”会显示两次。如果调用“reject”,“fail”会显示两次。
-
嗯,现在可以了。如果随时调用
fail,有没有办法退出链?
标签: javascript jquery promise jquery-deferred