如何在javascript中捕获异步调用的错误?

时间:2018-03-26 06:04:51

标签: javascript grails authorize.net accept.js

我在我的应用中集成了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将无法连接到外部服务。

会抛出以下错误

enter image description here

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

word 0
word 9
word 11

答案 2 :(得分:0)

使用.catch()

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