【问题标题】:Javascript error not caught using async ajax使用异步 ajax 未捕获 Javascript 错误
【发布时间】:2018-06-27 00:13:28
【问题描述】:

我是 ajax 和 javascript 的新手,我有点困惑,为什么当我的 ajax 调用是异步的时我的错误没有被捕获。

我已经查看了这个问题 (Catch statement does not catch thrown error),但我已经在调用我的函数,该函数在 Ajax 的成功块中捕获了我的错误。

我的代码如下所示:

var Codecheck = { 
   SundayCheck : function() {
      this.check = function (date, boolean) {
         if (boolean) return; //skip check
         else{
              ...logic to check if sunday
             if(!Sunday) 
                throw new Error
          }
       }
   }


 checkSunday : function(title) {

        $.ajax({
        url : url,
        type : 'GET',
        dataType: 'json',
        contentType : 'application/json;charset=UTF-8',
        async: false,
        success : function(response) {
            if (response.content == 'checkSunday') {
                new Codecheck.SundayCheck().check(date, true);
            }
            else {
                new Codecheck.SundayCheck().check(date, false);
            }
        },
        error : function(response) {
            document.write(response.responseText);
        }
    });

这工作正常,我的错误被捕获。但是,一旦我删除了 async: false,就不再捕获该错误。我正在调用我的检查方法,因此在 ajax 的成功块中捕获了我的错误,所以我不确定发生了什么。

我唯一能想到的就是调用我的 checkSunday 函数的任何东西,如果是异步调用,则假设之后运行的代码将运行,而如果是同步调用,则代码将等待。

但是,这仍然没有解释应该在仅在成功的 ajax 响应时调用的方法中捕获的错误处理如何不被调用,无论同步还是异步。

【问题讨论】:

  • 抛出的错误在哪里?错误是什么?
  • 抱歉,我已经更新了我的代码块以使其更清晰。错误是在成功块内 ajax 调用的方法中抛出的。
  • 顺便说一句,您在Codecheck 中定义了CheckSundaycheckSunday,但调用Codecheck.checksundayCheckers.checksunday - 所以没有真正的迹象表明您的成功函数将调用什么代码
  • 我很确定 error 参数应该为失败的 http 响应保留,而不是错误抛出。如果你异步运行它,它会在你使用 throw new Error 时模拟失败
  • @JaromandaX 对不起,我很快就为这个问题制作了一个原型代码。我更新了我的问题,但在真正的代码中,它并不是那么模棱两可/我的实际代码中没有错字。

标签: javascript jquery ajax asynchronous


【解决方案1】:

啊,我明白了。我最初并没有编写这段代码,所以我不知道发生的一切,但原因是捕获这些 javascript 错误的 try/catch 块不在我的 ajax 调用范围内。我的 ajax 调用只是抛出错误。

因此,如果这是异步发生的,那么 try catch 将在我的错误被抛出之前执行。

【讨论】:

    猜你喜欢
    • 2012-12-09
    • 2019-01-20
    • 1970-01-01
    • 2019-05-22
    • 2018-09-04
    • 2019-02-11
    • 2020-09-28
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多