我正在访问一个有点不确定的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);
}
})
}
答案 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次然后返回数据。函数的递归调用不断传递相同的回调函数。