【发布时间】:2015-10-20 21:08:40
【问题描述】:
我正在 jQuery 中执行一系列顺序 AJAX 调用,使用与 Deferred 链接的常用方法。第一次调用返回一个值列表,随后的调用是使用这些返回的列表条目进行的。在返回列表的第一个调用之后,后续调用可以按任何顺序进行,但必须一次调用一个。所以这就是我使用的:
$.when(callWebService()).then(
function (data) {
var looper = $.Deferred().resolve(),
myList = JSON.parse(data);
for (var i in myList) {
(function (i) {
looper = looper.then(function () { // Success
return callWebService();
},
function (jqXHR, textStatus, errorThrown) { // Failure
if (checkIfContinuable(errorThrown) == true)
continueChain();
else
failWithTerribleError();
});
})(i);
}
});
事实证明,随后的调用有时可能会失败,但我仍然想做剩下的调用。在我的清单中,这就是这个小小的创造性伪代码的目的:
if (checkIfContinuable(errorThrown) == true)
continueChain();
else
failWithTerribleError();
我到底该如何实现 continueChain 呢?似乎任何延迟的失败都会导致链的其余部分也失败。相反,我想记录错误并继续列表的其余部分。
【问题讨论】:
-
continueChain和failWithTerribleError到底是做什么的? -
@CobusKruger 尝试使用
.always() -
@JosephtheDreamer 他们是占位符。当实现 failWithTerribleError 时,如果错误不可继续,无论是否涉及记录错误、显示警报或其他任何事情,都会做任何需要做的事情。 continueChain 是我要问的问题 - 我希望完成下一个 Web 服务调用,就好像从来没有失败一样。
标签: javascript jquery jquery-deferred deferred