【发布时间】:2014-02-14 02:13:12
【问题描述】:
我有一系列从 ajax 调用中获得的 jQuery 承诺。例如:
AjaxCall1.then(AjaxCall2).then(AjaxCall3) etc...
在一些 ajax 调用之间我做了一些处理,例如第一个获取要搜索的内容,下一个执行搜索,第三个处理搜索结果。
如果 AjaxCall2 不返回搜索结果,我想要做的是中断序列。 (实际上我会重新运行该函数)
我该怎么做?
【问题讨论】:
我有一系列从 ajax 调用中获得的 jQuery 承诺。例如:
AjaxCall1.then(AjaxCall2).then(AjaxCall3) etc...
在一些 ajax 调用之间我做了一些处理,例如第一个获取要搜索的内容,下一个执行搜索,第三个处理搜索结果。
如果 AjaxCall2 不返回搜索结果,我想要做的是中断序列。 (实际上我会重新运行该函数)
我该怎么做?
【问题讨论】:
然后你可以传递第二个参数作为你失败的回调函数
AjaxCall1.then( AjaxCall2, AjaxCall1 ).then(AjaxCall3, AjaxCall2)
或使用 .done 和 .fail
AjaxCall1.done( AjaxCall2 ).fail( AjaxCall1 ).... //and so on
【讨论】:
如果 AjaxCall2 不返回搜索结果,我想做的是中断序列。
只是不要“不返回结果”,而是“抛出异常”——序列会自动中断。您可以通过 rejecting a deferred 在您的 AjaxCall2 函数中执行此操作。
我实际上会重新运行该函数
您甚至可以通过将它们安装为错误处理程序来重新运行它们:
function tryToFind() {
return AjaxCall1().then(AjaxCall2); // which might fail
}
tryToFind().then(null, tryToFind /* again! */).then(AjaxCall3);
【讨论】: