Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何正确处理多个异步请求?_Javascript_Ajax - Fatal编程技术网

Javascript 如何正确处理多个异步请求?

Javascript 如何正确处理多个异步请求?,javascript,ajax,Javascript,Ajax,是否有人知道一些好的参考资料/书籍,我可以从中了解如何处理多个异步请求 让我们考虑下面的代码: Payment.createToken = function(data) { var data = data; apiCall("POST", "api/createToken", data, function(success, response) { if (success) { data.token = response.id;

是否有人知道一些好的参考资料/书籍,我可以从中了解如何处理多个异步请求

让我们考虑下面的代码:

Payment.createToken = function(data) {
    var data = data;

    apiCall("POST", "api/createToken", data, function(success, response) {
        if (success) {
            data.token = response.id;

            // If there's coupon code passed in data object, check it's validity, else send payment request
            if (data.coupon) {
                // Check if coupon is valid
                Payment.verifyCoupon(data);
            } else {
                // Send payment request
                Payment.chargePlan(data);
            }
        } else {
            // Handle error
        }
    });
};

Payment.verifyCoupon = function(data) {
    var data = data;

    apiCall("POST", "/api/checkCoupon", data, function(success, response) {
        if (success) {
            Payment.chargePlan(data);
        } else {
            // Handle error
        }
    });
};

Payment.chargePlan = function(data) {
    apiCall("POST", "/api/chargePlan", data, function(success, response) {
        if (success) {
            Payment.changeUserType(data);
        } else {
            // Handle error
        }
    });
};

Payment.changeUserType = function(data, response) {
    apiCall("PUT", "api/users/", data, function(success, response) {
        if (success) {
            // User type changed successfully
        } else {
            // Handle error
        }
    });
};
正如你所见,它很长,有4个步骤。我应该如何正确处理错误等。?让我们考虑一下,这些调用应该尽可能地可重用。

我已经成功地使用了这些调用。它有助于减少混乱,并让您可以选择按顺序运行各种进程,或者同时跟踪实际完成的时间

如果您需要知道是否出了问题,它会引用可选的错误处理回调


我知道这不是你想要的确切答案,但它可能会有所帮助

在这种情况下,我通常创建一个异步操作队列来执行并串联运行它们,只有在上一个成功时才调用下一个,如果没有成功,则直接调用最后一个回调,并将错误作为第一个参数。

使用