【问题标题】:Break jQuery Ajax then / promise sequence打破jQuery Ajax then / promise 序列
【发布时间】:2014-02-14 02:13:12
【问题描述】:

我有一系列从 ajax 调用中获得的 jQuery 承诺。例如:

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

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

如果 AjaxCall2 不返回搜索结果,我想要做的是中断序列。 (实际上我会重新运行该函数)

我该怎么做?

【问题讨论】:

    标签: jquery promise


    【解决方案1】:

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

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

    或使用 .done 和 .fail

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

    【讨论】:

      【解决方案2】:

      如果 AjaxCall2 不返回搜索结果,我想做的是中断序列。

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

      我实际上会重新运行该函数

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

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

      【讨论】:

        猜你喜欢
        • 2016-03-27
        • 2019-01-09
        • 1970-01-01
        • 2012-08-06
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 2023-03-05
        • 2017-06-08
        相关资源
        最近更新 更多