Javascript JS async/await使用链接填充数组,然后在填充数组后下载

Javascript JS async/await使用链接填充数组,然后在填充数组后下载,javascript,api,promise,async-await,Javascript,Api,Promise,Async Await,我知道这已经被问了很多次了,但我仍然无法找到解决我的问题的方法。基本上按照标题,我编写了一个函数getLinks(),它将通过来自的api调用填充一个全局数组links 当我尝试通过函数getImages()下载图像时,会出现问题,因为该函数需要等待链接数组填充后才能运行。我似乎无法获得函数顺序执行的正确逻辑 完整代码如下。提前感谢您的指点 var fs=require('fs'), 请求=要求(“请求”); //下载个人内容 函数下载(uri、文件名、回调){ head(uri,函数(err

我知道这已经被问了很多次了,但我仍然无法找到解决我的问题的方法。基本上按照标题,我编写了一个函数
getLinks()
,它将通过来自的api调用填充一个全局数组
links

当我尝试通过函数
getImages()
下载图像时,会出现问题,因为该函数需要等待
链接
数组填充后才能运行。我似乎无法获得函数顺序执行的正确逻辑

完整代码如下。提前感谢您的指点

var fs=require('fs'),
请求=要求(“请求”);
//下载个人内容
函数下载(uri、文件名、回调){
head(uri,函数(err,res,body){
请求(uri).pipe(fs.createWriteStream('training/'+filename)).on('close',callback);
});
};
//从API获取图像链接
var-links=[];
功能二(n){
返回n>9?“+n:“0”+n;
}
异步函数getLinks(){
links=[];//清除链接数组
对于(i=1;i<30;i++){//循环30天,所选月份为2018年12月
对于(j=0;j<24;j++){//每天循环24小时
请求('https://api.data.gov.sg/v1/transport/traffic-images?date_time=2018-12-'+two(i)+'T'+two(j)+'%3A00%3A00',函数(错误、响应、正文){
如果(!error&&response.statusCode==200){
var parsedData=JSON.parse(body);
links.push(parsedData.items[0][“照相机”][0][“图像”].toString())
}否则{
console.log(错误)
}
})
}
}
返回;
}
//抓取并下载到目录
异步函数getImages(){
等待getLinks();
对于(i=0;igetImages()getLinks在解析之前返回

也许在请求调用周围包装一个承诺,将它们放入一个数组中,然后返回promise.all(asyncArray)

但目前它只是

async function getImages() {
  await undefined //getLinks();
  for( i = 0; i < links.length; i++) {
    download(links[i], i, function(){});
  }
}
异步函数getImages(){ 等待未定义的//getLinks(); 对于(i=0;i
e、 g:

异步函数getLinks(){ links=[];//清除链接数组 让异步=[] 对于(i=1;i<30;i++){//循环30天,所选月份为2018年12月 对于(j=0;j<24;j++){//每天循环24小时 asyncs.push(新承诺((解析、拒绝)=>{ 请求('https://api.data.gov.sg/v1/transport/traffic-images?date_time=2018-12-'+two(i)+'T'+two(j)+'%3A00%3A00',函数(错误、响应、正文){ 如果(!error&&response.statusCode==200){ var parsedData=JSON.parse(body); links.push(parsedData.items[0][“照相机”][0][“图像”].toString()) 解析(parsedData.items[0][“摄影机”][0][“图像”].toString()) }否则{ console.log(错误) //拒绝(错误) } }) })) } } 返回承诺.all(异步) } 异步函数getImages(){ 让_links=wait getLinks(); 对于(i=0;i
getLinks在解析之前返回

也许在请求调用周围包装一个承诺,将它们放入一个数组中,然后返回promise.all(asyncArray)

但目前它只是

async function getImages() {
  await undefined //getLinks();
  for( i = 0; i < links.length; i++) {
    download(links[i], i, function(){});
  }
}
异步函数getImages(){ 等待未定义的//getLinks(); 对于(i=0;i e、 g:

异步函数getLinks(){ links=[];//清除链接数组 让异步=[] 对于(i=1;i<30;i++){//循环30天,所选月份为2018年12月 对于(j=0;j<24;j++){//每天循环24小时 asyncs.push(新承诺((解析、拒绝)=>{ 请求('https://api.data.gov.sg/v1/transport/traffic-images?date_time=2018-12-'+two(i)+'T'+two(j)+'%3A00%3A00',函数(错误、响应、正文){ 如果(!error&&response.statusCode==200){ var parsedData=JSON.parse(body); links.push(parsedData.items[0][“照相机”][0][“图像”].toString()) 解析(parsedData.items[0][“摄影机”][0][“图像”].toString()) }否则{ console.log(错误) //拒绝(错误) } }) })) } } 返回承诺.all(异步) } 异步函数getImages(){ 让_links=wait getLinks(); 对于(i=0;i谢谢!是的,它现在工作得很好,我想我还需要更好地了解async/Wait.:)谢谢你!是的,它现在工作得很好,我想我还需要更好地了解async/Wait.:)