我正在訪問一個稍有不足的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