Nodejs axios http 请求循环

我对 Axios 和 foreach 循环有疑问。我的 Api 提供程序仅支持 5 个同时调用,因此我想一一调用,但是当执行此代码时,每个主体不等待完成调用函数并收到错误代码 429。如何解决此问题?谢谢。


async function call(url) {

  var options = {

    method: 'GET',

    url: url,

    auth: {

      username: '*****',

      password: '*****'

    }

  };

  var response = await axios.request(options);

  print(response.data["Id"])

}


app.get('/save', async (req, res) => {

  var options = {

    method: 'GET',

    url: 'getListUser',

    auth: {

      username: '***',

      password: '***'

    }

  };

  var response = await axios.request(options);


  response.data["users"].forEach( async (val) => {

    console.log("ENTER");

    var url = 'getDetailUser' + val["id"];

    var res = await call(url); // <- How to wait finish this?

    console.log("EXIT")

  }, (err) => {

      console.log(err)

  })

  res.status(200).send("ok").end();

});


至尊宝的传说
浏览 143回答 3
3回答

呼啦一阵风

仅供参考,Promise无法使用涉及回调的循环,即forEach。或者,您可以使用for oftry {&nbsp; for (const val of response.data['users']) {&nbsp; &nbsp; console.log("ENTER");&nbsp; &nbsp; var url = 'getDetailUser' + val["id"];&nbsp; &nbsp; var res = await call(url);&nbsp;&nbsp; &nbsp; console.log("EXIT")&nbsp; }} catch (error) {&nbsp; console.log(error)}

临摹微笑

只需稍作改动await Promise.allSettled(response.data["users"].map(val => {   var url = 'getDetailUser' + val["id"];   return call(url); }))

慕容3067478

Promise.all() 就是这样await Promise.all(response.data["users"].map(val => {&nbsp; &nbsp;var url = 'getDetailUser' + val["id"];&nbsp; &nbsp;return call(url);&nbsp;}))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript