打破jQuery Ajax然后/ promise序列

时间:2014-02-13 02:59:07

标签: jquery promise

我从ajax调用获得了一系列jQuery promise。例如:

 AjaxCall1.then(AjaxCall2).then(AjaxCall3) etc...

在一些ajax调用之间我做了一些处理,例如第一个获取搜索内容,下一个执行搜索,第三个处理搜索结果。

如果AjaxCall2没有返回搜索结果,我想要做的是打破seqeuence。 (我将重新运行该功能)

我该怎么做?

2 个答案:

答案 0 :(得分:0)

然后你可以传递第二个参数作为失败的回调函数

AjaxCall1.then( AjaxCall2, AjaxCall1 ).then(AjaxCall3, AjaxCall2)

或使用.done和.fail

AjaxCall1.done( AjaxCall2 ).fail( AjaxCall1 ).... //and so on

答案 1 :(得分:0)

  

如果AjaxCall2没有返回搜索结果,我想要做的是打破seqeuence。

不要“不返回结果”,而是“抛出异常” - 序列将自动中断。您可以在AjaxCall2函数中rejecting a deferred执行此操作。

  

我将重新运行该功能

您甚至可以通过将它们安装为错误处理程序来重新运行它们:

function tryToFind() {
    return AjaxCall1().then(AjaxCall2); // which might fail
}
tryToFind().then(null, tryToFind /* again! */).then(AjaxCall3);