您好,我有两个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});
}
}
})
答案 0 :(得分:0)
我会使用“承诺”来等待,直到您收到第一个请求的回复。一旦发生这种情况,您可以触发第二个请求(请参见下面的链接中的“然后”)。一旦第二个请求返回结果,您就可以在使用数据之前合并两个请求的响应。
如果请求B需要使用请求A响应中的数据,则请求A应该位于链中的第一位。这样您就可以根据第一个请求的响应来调整第二个请求,例如与IF语句。如果两者完全独立,则可以选择其中一个请求。
此链接上有一节关于链接承诺,该章节应与您要执行的操作有关:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
有关使用promise和'catch'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/catch
处理错误的详细信息答案 1 :(得分:0)
实际不需要使用promise,尽管它们确实简化了代码结构,但是您可以轻松地嵌套请求:
request(url, function(err, response, body) {
request(url2, function(err2, response2, body2) {
// Both request data is available here
})
})
请注意,可以在此处更改回调函数中使用的变量名
如果您有一堆可以独立运行的请求,请查看promise.all