异步请求递归

时间:2015-08-07 08:16:28

标签: javascript jquery ajax node.js recursion

我需要向我们的API发出请求,以检查我们数据库记录中的标志。我可以将此请求设置为“n”次。如果我找不到正确的值,我将返回错误。

我曾尝试使用JQuery属性async:false使异步请求同步而不起作用(我已经看到它已被弃用)。

另一个选择是递归地发出一个AJAX请求,但是AJAX缓存了这个值。我使用cache:false也没有效果。

我正在寻找其他替代方案(节点库,模式......)但直到现在还没有运气。

有人解决了类似的问题吗?

UPDATE 1:我的最后一段代码是递归调用

function checkPay(initialResponse, attempts){
if (attempts == 50){
    console.log("Something goes wrong after 50 attempts...");
    console.log("Let's restart and try again");
} else {
    ajax.jsonRequest('get', 'check_pay', {transactionID: "123FOO"}) //A simple wrapper for $.ajax
        .done(function(responseStatus){
            if (responseStatus.status == "PENDING"){
                console.log("Still waiting...");
                checkPay(initialResponse, attempts + 1);
            } else if (responseStatus.status == "ACCEPTED"){
                console.log("Yuhuu!!!");                    
            } else if (responseStatus.status == "REJECTED") {
                console.log("Ooops...");                    
            } else {
                console.log("Wat?");
            }
        }).fail(function(error){
            console.log("ERROR", error);
            return "REJECTED"
        });
}

}

1 个答案:

答案 0 :(得分:2)

您可以通过向每个请求添加伪随机参数来阻止缓存。浏览器和您的服务器会相信,因为您的请求包含不同的查询数据,您可能会要求提供不同的信息,并且不会提供缓存的响应。

您应该只需更改

即可
ajax.jsonRequest('get', 'check_pay', {transactionID: "123FOO"})

要:

ajax.jsonRequest('get', 'check_pay', {
  transactionID: "123FOO",
  timestamp: Date.now()
})