我有一个应用程序需要请求美国宇航局当天的天文图片5次,然后它将加载显示这些图像的网页。然后我请求一个不同的站点(LaunchLibrary API)来接下来的5次启动。我的问题是我必须显示图像;有时它会显示2张图像,有时是5张,有时则不会。这显然只是GET请求的异步性质,但我想知道是否有办法在呈现页面之前等待NASA图片。
这是我的一个例子。
app.get("/index", function(req, res) {
/**Requesting NASA's Astronomy Picture of the Day**/
var apod_url = "https://api.nasa.gov/planetary/apod?api_key=[My API Key]"
var apod_img_urls = [];
var curr_moment = moment();
for(var i = 0; i < 5; i++) {
var appended_url = apod_url + "&date=" + curr_moment.subtract(i, "days").format("YYYY-MM-DD");
request(appended_url, function(error, reponse, body) {
if(!error && reponse.statusCode == 200) {
var img_json = JSON.parse(body);
apod_img_urls.push(img_json.hdurl);
} else {
console.log(error);
}
});
}
/**************************************************/
var url = "https://launchlibrary.net/1.3/launch/next/5";
request(url, function(error, response, body) {
if(!error && response.statusCode == 200) {
var data = JSON.parse(body);
res.render("index", {data: data, apod_img_urls: apod_img_urls});
} else {
console.log(error);
}
});
});
我还尝试在我的请求中将if-statement内部的图像请求循环放在接下来的5次启动中,这导致没有任何图像显示出来。有没有办法可以“同步”这些请求,以便在呈现页面之前返回所有图像?