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

时间:2013-01-20 20:44:47

标签: javascript ajax

有谁知道一些好的资源/书籍,我可以找到如何处理多个异步请求?

让我们考虑下面的代码:

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个步骤。我该如何妥善处理错误等?让我们考虑一下这些调用应尽可能重用。

2 个答案:

答案 0 :(得分:0)

我已经使用this library取得了一些成功。它有助于减少混乱,并为您提供按顺序或同时运行各种流程的选项(跟踪实际完成所有流程的时间)。

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

我意识到这不是您正在寻找的确切答案,但它可能会有所帮助。

答案 1 :(得分:0)

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