NodeJs - 制作' GET'请求模块在while循环中有条件地请求

时间:2017-08-02 21:53:52

标签: javascript request

我正在访问一个有点不确定的API端点。大约70%的时间它会发回正确的JSON响应,但有几次它会废弃并发送一个表示"值/值"的XML。我想做一个while循环请求,直到它得到正确的响应。在我的情况下,我保证最终会得到正确的响应,所以这就是为什么我在循环而不是弄清楚为什么端点会被淘汰出来。

这是我的代码:

var gotValidResponse = false;

while(!gotValidResponse){
    request(options, function(err, res, body){
        if(err){
            console.log(err);
            return;
        }

        try{
            data = JSON.parse(body);
            console.log(data);
            gotValidResponse = true;
        }catch(e){
            console.log('trying again');
        }
     });
}

processJSON(data);

显然上面的代码不起作用,但希望它能显示我想要做的事情。谢谢你的帮助!

编辑:喜欢这个吗?

var myData = getStuff(options);

function getStuff(options){
    request(options, function (err, res, body) {
        if (err) {
            console.log(err);
            return
        }

        try {
            data = JSON.parse(body);
            return data;
        } catch (e) {
            return getStuff(options);
        }
    })
}

1 个答案:

答案 0 :(得分:1)

你的编辑几乎是正确的。你需要做的是继续调用函数,直到它返回你想要的。像这样(我的条件仅仅是说明性的):

var attemps = 1;
var fake = function(data, cb) {
    console.log('Attemp nº', attemps);

    if(attemps < 5) {
    attemps += 1;
    return fake(data, cb);
  } else {
    return cb(null, 'completed');
  }
}

fake('whatever', function(err, res) {
    console.log(res)
})

https://jsfiddle.net/eysu2amp/

如果检查控制台,您将看到伪函数被调用5次然后返回数据。函数的递归调用不断传递相同的回调函数。