我正在访问一个稍有不足的API端点。大约70%的时间它发回正确的JSON响应,但有几次它会发出一个XML并发送“值/值”。我想做一个while循环什么请求,直到它得到正确的回应。就我而言,我保证最终会得到正确的响应,所以这就是为什么我要循环而不是弄清楚端点为什么要退出。NodeJs - 使用请求模块在一个while循环中有条件地发出'GET'请求
这里是我的代码:
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);
}
})
}
那么,绝对不要这样做,永远。 while循环会在实际返回之前发送很多请求(因为'request'是异步和全部的) - 你应该做的是做一个请求的方法,然后在响应中执行检查,如果它是不是你想要的,再次调用该方法。这样,每个请求在另一个被触发之前完成。在你的例子中,如果服务器关闭,它只会无限请求。 – tymeJV
感谢您的回复。你能看看我的编辑,并告诉我,如果这是你的意思? –
你正在做一个异步请求,你不会像你想象的那样得到返回值。你需要使用回调或承诺 – Paul