发出多个api / http node.js请求很困难

您好,我有两个api请求可以单独工作,但是要让它们都在我的node.js应用程序上工作都遇到了很多麻烦。有没有简单的方法可以发出两个请求?我尝试过提出两个请求,将数据放入变量中,然后呈现它们两个,但是遇到全局变量问题。任何帮助,将不胜感激。


  request(url, function (err, response, body) {


    if(err){

      res.render('index', {weather: null, error: 'Error, please try again'});

    } else {

      let weather = JSON.parse(body);


      if(weather.main == undefined){

        res.render('index', {weather: null, error: 'Error, please try again'});

      } else {

        if (rain == "0,rain"){

        let weatherText = `It's ${weather.main.temp} degrees celsius and with wind speeds of ${weather.wind.speed} mph in ${weather.name} ${weather.sys.country}! & ${weather.weather[0].description}`  ;

        res.render('index', {weather: weatherText, error: null});

      }

      else{

        let weatherText = `It's ${weather.main.temp} degrees celsius and with wind speeds of ${weather.wind.speed} mph in ${weather.name} ${weather.sys.country}!`  ;

        res.render('index', {weather: weatherText, error: null});

      }

      }

    }


  });

request(url2, function (err, response, body) {

  if(err){

    res.render('index', {news: null, error: 'Error, please try again'});

  } else {

    let result = JSON.parse(body);

    let news = result.articles[0].title

    if(news == undefined){

      res.render('index', {news: null, error: 'Error, please try again'});

    } 

    else{


      res.render('index', {news:news, error: null});

    }

    }

  })


慕妹3242003
浏览 202回答 2
2回答

烙印99

我会使用“承诺”来等待,直到收到您的第一个请求的回复为止。一旦发生这种情况,您可以触发第二个请求(请参阅下面的链接中的“ then”)。一旦第二个请求返回结果,就可以在使用数据之前合并两个请求的响应。如果请求B需要使用来自请求A响应的数据,则请求A应该位于链中的第一位。这样,您可以根据第一个请求的响应(例如,使用IF语句)来调整第二个请求。如果两者完全独立,则可以选择其中一个请求先行。在此链接上有关于链接承诺的部分,该部分应与您要执行的操作有关:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/然后有关使用promise和'catch'处理错误的详细信息https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch

倚天杖

尽管确实可以简化请求结构,但实际上没有必要使用promise,但是您可以轻松地嵌套请求:request(url, function(err, response, body) {    request(url2, function(err2, response2, body2) {        // Both request data is available here    })})请注意,可以在此处更改回调函数中使用的变量名称如果您有一堆可以独立运行的请求,请调查 promise.all
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript