如何同时从多个api获取数据并将其显示在我的网页上



我正在构建一个新闻/博客网站,该网站从外部api获取数据并将其显示在网页上。到目前为止,我已经成功地从一个api中呈现了数据,但我的网页中也有一个体育部分,要求我从另一个这样的api中获取数据,我不知道如何在不让节点出错的情况下做到这一点。下面是我的NODE.JS代码-

//jshint esversion: 6
const express = require('express');
const https = require('https');
const bodyParser = require("body-parser");
const ejs = require("ejs");
const app = express();
const port = 3000;

app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));

app.get('/', (req, res) => {
const sporturl ="https://timesofindia.indiatimes.com/feeds/newsfeed/33187923.cms? 
feedtype=sjson";
const newsurl = "https://timesofindia.indiatimes.com/feeds/newsdefaultfeeds.cms? 
feedtype=sjson#";
https.get(newsurl, function(response){
var data;
response.on("data", function(chunk) {
if (!data) {
data = chunk;
} else {
data += chunk;
}
});
response.on("end", function() {
const fulldata = JSON.parse(data);
let mainHeader = fulldata.NewsItem[0].HeadLine;
let mainheaderurl = fulldata.NewsItem[0].WebURL;
let mainCaption = fulldata.NewsItem[0].Caption;
let mainUrl = fulldata.NewsItem[0].Image.Photo;
let featured = fulldata.NewsItem[1].HeadLine;
let featuredlink = fulldata.NewsItem[1].WebURL;
let featuredimg = fulldata.NewsItem[1].Image.Photo;

res.render("index",{
mainHeader: mainHeader,
headerUrl: mainheaderurl,
mainCaption: mainCaption,
imgUrl: mainUrl,
featured:featured,
featuredlink:featuredlink,
featuredimg:featuredimg,
});
});
});

});
app.listen(port, () => {
console.log(`server started on port 3000`);
});
// api key: ff827a803d4540f5814864d207fd23b5
// const mainHeadingUrl = "https://newsapi.org/v2/everything?q=tesla&from=2021- 
05-26&sortBy=publishedAt&apiKey=ff827a803d4540f5814864d207fd23b5";

这里有答案。

nodejs-如何承诺http.request?拒绝被调用两次

然后,您可以使用上面描述的方法,使用Promise.all并获得所需的结果

我将使用Fetch API(对于nodeJS,您可以使用node-fotch(、async/await和Promise.all来收集数据。

将一些API调用推送到数组中。它们将作为承诺返回(数据将(或不会(返回的承诺(。Promise.all等待所有这些承诺都已解析,并将数据输出为数组,然后可以对其进行迭代。

function mockApi(n) {
return new Promise((res, rej) => {
setTimeout(() => res(n), 2000);
});
}
// Here you would bundle up your fetch calls
// eg:  fetch(url)
// I'm using mockApi as a convenience
const fetchCalls = [mockApi(1), mockApi(2), mockApi(3)];
async function getData() {
const data = await Promise.all(fetchCalls);
console.log(data);
}
getData();