Javascript 异步等待未按顺序运行

Javascript 异步等待未按顺序运行,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,异步似乎超过了我的头脑,我只是不明白它 我看了其他问题,但似乎不知道出了什么问题 我已经在下面包含了一段我已经测试过的代码,我仍然遇到同样的问题 当试图等待这两个文件下载时,我的文件似乎已下载,而其他所有文件都在执行(在本例中为console.log) 我希望console.info('Done')在下载文件后运行,但情况并非如此。这一点很重要,因为稍后会上载文件(与上载有相同的问题),并且我会在上载后返回重要数据。这需要存储起来以便以后使用 TL;DR,console.info('Done')

异步似乎超过了我的头脑,我只是不明白它

我看了其他问题,但似乎不知道出了什么问题

我已经在下面包含了一段我已经测试过的代码,我仍然遇到同样的问题

当试图等待这两个文件下载时,我的文件似乎已下载,而其他所有文件都在执行(在本例中为console.log)

我希望
console.info('Done')
在下载文件后运行,但情况并非如此。这一点很重要,因为稍后会上载文件(与上载有相同的问题),并且我会在上载后返回重要数据。这需要存储起来以便以后使用

TL;DR,
console.info('Done')dataPortDOWN()
之前,正在执行code>

//导入
常量fs=require('fs'),
{promisify}=require('util'),
asyncPipeline=promisify(要求(“流”).pipeline),
{once}=require(“事件”),
csv=require('csv-parser'),
fetch=require('node-fetch');
//下载文件
异步函数fetchBody(url){
const response=等待获取(url);
如果(!response.ok)
抛出oops;
返回响应.body;
}
//呼叫下载
异步函数dataPortDOWN(){
const csvAsync=csv();
fs.createReadStream('data.csv')
.管道(csvAsync)。
打开(“数据”,异步(行)=>{
如果(row.Timestamp==“”)
返回;
/* */
const sigUrl=行['removed']。替换(“removed”,“removed”),
picUrl=行['removed']。替换(“removed”,“removed”),
id=行['removed']。替换(“removed”,“removed”);
const[sigBody,picBody]=等待承诺([
fetchBody(sigUrl),
fetchBody(picUrl),
]);
const sigLocalFile=fs.createWriteStream(`${id}-sig.jpg`),
picLocalFile=fs.createWriteStream(`${id}-pic.jpg`);
sigBody.pipe(sigLocalFile);
pipe(picLocalFile);
等待一次(sigLocalFile,“finish”);
等待一次(picLocalFile,“finish”);
/* */
})
等待一次(csvAsync,“完成”);
}
异步函数main(){
等待dataPortDOWN();
console.info(`Done.`);
}
main();

@Nit如果
响应,它只会抛出
引用错误。
为false。虽然不是很理想,但我认为单靠它并不能阻止此代码按预期工作。问题似乎是您正在等待该CSV流的
finish
事件,但您并不是在等待在每个
data
事件上启动的处理。给定的可读流是异步可写的,您可能想尝试Wait(fs.createReadStream('data.csv').pipe(csvAsync))的
{…/*await*/}
,它将严格按顺序执行所有操作。我很快会尝试,现在不行。谢谢你的回复!我尝试了@Bergi推荐的方法,它只下载了一组文件,但并没有完成日志记录