【问题标题】:how to catch error of async call in javascript?如何在javascript中捕获异步调用的错误?
【发布时间】:2018-09-04 05:05:00
【问题描述】:

我正在将 accept.js 集成到我的应用程序中。

https://developer.authorize.net/api/reference/features/acceptjs.html

这不是一个特别的集成问题。这是我试图解决的 JavaScript 问题。

按照教程,当点击表单提交时,有一个函数会被调用。该函数负责将信用卡信息打包并发送给authorize.net服务器。

<script type="text/javascript">
function sendPaymentDataToAnet() {
    var authData = {};
        authData.clientKey = "YOUR PUBLIC CLIENT KEY";
        authData.apiLoginID = "YOUR API LOGIN ID";
    var cardData = {};
        cardData.cardNumber = document.getElementById("cardNumber").value;
        cardData.month = document.getElementById("expMonth").value;
        cardData.year = document.getElementById("expYear").value;
        cardData.cardCode = document.getElementById("cardCode").value;


    var secureData = {};
        secureData.authData = authData;
        secureData.cardData = cardData;

        Accept.dispatchData(secureData, responseHandler);
}
</script>

问题是 Accept.dispatchData() 似乎是一个异步调用。如果我在单击提交之前断开网络连接,那么 Accept.dispatchData 将无法连接到外部服务。

会报如下错误

我的目标是发现这个错误。我尝试将 Accept.dispatchData 包装在 try catch 块中,但它似乎没有捕捉到抛出的错误。似乎错误在其中的某个地方被捕获。如何检测 ERR_INTERNET_DISCONNECTED 错误?谢谢!

【问题讨论】:

    标签: javascript grails authorize.net accept.js


    【解决方案1】:

    window.onerror 可以用来检测window errors

    navigator.onLine可用于检测internet connection

    // Window: On Error
    window.onerror = (error) => console.log('navigator.onLine:', navigator.onLine)
    
    // Trigger.
    const trigger = error

    【讨论】:

    • 这是抛出“ReferenceError: error is not defined”
    【解决方案2】:

    这是网络连接问题,如果您的网络出现故障,那么每个 javascript / jquery 插件都会抛出此异常,即使是 Google / Facebook 网站。但您可以在调用您的 api 之前检查您的网络,如下所示。

    if(navigator.onLine){
     //do your stuff
    }else{
     alert("Please, check your network connection")
    }
    

    【讨论】:

      【解决方案3】:

      使用.catch()

      Accept.dispatchData()
         .then(() => {})
         .catch( error => console.log(error))
      

      【讨论】:

      • 我试过这个,但失败了。它说无法读取未定义的属性'then'。 Accept.dispatchData() 似乎返回 undefined。
      猜你喜欢
      • 1970-01-01
      • 2018-06-27
      • 2014-12-01
      • 2021-11-02
      • 2015-05-31
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2022-01-14
      相关资源
      最近更新 更多