假设我有一个返回promise的函数。外部函数检查返回的诺言,以决定如何处理.fail()条件。

function refreshTimeline() {
    var promise = ajaxMethod1()
                  .then (function (data) {
                      return ajaxMethod2()
                  })
                  .then(function(json) {
                      //...
                  });
    return promise;
}

function outerFunction() {
     refreshTimeline
     .then(function() {
          //...
     })
     .fail(function(jqXHR, textStatus, errorThrown) {
        // This will handle any errors in the chain *including* the refreshTimeline
     });
}


我的问题是我需要在refreshTimeline()中引发一个自定义业务异常,该异常应由外部函数捕获,就像处理任何常规Ajax错误一样。目标是让externalFunction的fail()获取此异常,并可能以特殊方式处理它(也许它需要识别它)。

但是以下操作无效:

  function refreshTimeline() {
        var promise = ajaxMethod1()
                      .then (function (data) {
                          return ajaxMethod2()
                      })
                      .then(function(json) {
                          if (someBusinessCondition(json) {
                               // throw custom exception
                               throw "MyException"; //JS gives "Uncaught" msg
                          }
                      });
        return promise;
    }


因此,我不想自己在refreshTimeline()中处理此业务错误(因为这不是此实用程序功能的工作-它只是将错误转发到下游),而我想将其传播到外部错误处理程序,该错误处理程序将是常规.fail()。这可能吗?

最佳答案

而不是抛出异常,而是以您的字符串/ Exception /任何对象作为参数,返回一个被拒绝的延迟/承诺实例。

function refreshTimeline() {
    var promise = ajaxMethod1()
        .then (function (data) {
            return ajaxMethod2();
        })
        .then(function(json) {
            if (someBusinessCondition(json) {
                // return your error as a rejected (failed) promise
                return $.Deferred().reject("MyException");
            }
        });
    return promise;
}


这将使用.fail()作为第一个参数(您将其命名为"MyException")的值调用外部jqXHR

关于javascript - jQuery Ajax Promise:抛出自定义异常,并使其陷入外部fail(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48833723/

10-10 00:27
查看更多