如何重复"request"直到成功?NODEJS



我在stackoverflow中检查了一些线程,但对我没有任何帮助。我有此请求电话,我需要它尝试发送请求直到成功(但是如果失败,它必须等待至少3秒):

sortingKeywords.sortVerifiedPhrase = function(phrase) {
    var URL = "an API URL"+phrase; //<== Obviously that in my program it has an actual API URL
    request(URL, function(error, response, body) {
        if(!error && response.statusCode == 200) {
            var keyword = JSON.parse(body);
            if(sortingKeywords.isKeyMeetRequirements(keyword)){ //Check if the data is up to a certain criteria
                sortingKeywords.addKeyToKeywordsCollection(keyword); //Adding to the DB
            } else {
                console.log("doesn't meet rquirement");
            }
        } else {
            console.log(phrase);
            console.log("Error: "+ error);
        }
    });
};

这是奇怪的部分,如果我从浏览器连续将相同的短语称为相同的短语,它几乎没有错误(通常指出:速率限制时间)。

>

感谢您的帮助。预先感谢。

这是我为此请求编写的工作程序。它通过函数发送请求,如果请求失败,它将返回error处理程序并再次调用该函数。

如果该功能成功,则程序将返回承诺并退出执行。

注意:如果您输入无效的URL程序,则该程序立即退出,这与request模块有关,我想说实话。它使您知道您的URL无效。因此,您必须在URL

中包括https://http://
var request = require('request');
var myReq;
//our request function
function sendTheReq(){
  myReq = request.get({
    url: 'http://www.google.com/',
    json: true
    }, (err, res, data) => {
    if (err) {
      console.log('Error:', err)
    } else if (res.statusCode !== 200) {
      console.log('Status:', res.statusCode)
    } else {
      // data is already parsed as JSON:
      //console.log(data);
    }
  })
}
sendTheReq();
//promise function
function resolveWhenDone(x) {
  return new Promise(resolve => {
    myReq.on('end', function(){
      resolve(x)
    })
    myReq.on('error', function(err){
      console.log('there was an error:  ---Trying again');
      sendTheReq();  //sending the request again
      f1();          //starting the promise again
    })
  });
}
//success handler
async function f1() {
  var x = await resolveWhenDone(100);
  if(x == 100){
      console.log("request has been completed");
      //handle other stuff
  }
}
f1();

错误运行此代码

setTimeout(function(){}, 3000);

请参阅此https://www.w3schools.com/jsref/met_win_settimeout.asp

您也可以制作这样的代码

var func1 = function(){}; setTimeout(func1, 3000);

相关内容

  • 没有找到相关文章

最新更新