Javascript AWS S3在循环中创建ReadStream仅读取和写入1个文件

Javascript AWS S3在循环中创建ReadStream仅读取和写入1个文件,javascript,node.js,amazon-s3,Javascript,Node.js,Amazon S3,我试图使用readstream从S3检索多个文件,并将它们本地插入到单个文件中 下面,“output”变量是我希望使用下载的S3文件数据附加到的单个writestream 我正在循环使用nextDay变量作为S3键的日子。fileservice.s3Handler.getS3Obj返回一个S3对象,该对象允许单个文件的readstream并附加到输出文件。 但是,没有读取其他文件,也没有使用on('data',())方法显示控制台。 我试图将readstream包装成一个承诺,即尝试等待读取完成

我试图使用readstream从S3检索多个文件,并将它们本地插入到单个文件中

下面,“output”变量是我希望使用下载的S3文件数据附加到的单个writestream

我正在循环使用nextDay变量作为S3键的日子。fileservice.s3Handler.getS3Obj返回一个S3对象,该对象允许单个文件的readstream并附加到输出文件。 但是,没有读取其他文件,也没有使用on('data',())方法显示控制台。 我试图将readstream包装成一个承诺,即尝试等待读取完成,但它运行的是相同的错误

最近,我一直收到这样的错误:
“ERR\u STREAM\u WRITE\u AFTER\u END”

不确定这里出了什么问题

async fetchCSV(req, res) {

    const output = fs.createWriteStream(outputPathWithFile, {
                   'flags': 'a'});

    let nextDay = startDate;

    while (nextDay !== endDate) {

        const s3path = path.join(`${req.params.stationId}`, `${nextDay}.csv`);

        const file = await this.fileService.s3Handler.getS3Obj(s3path);

        await this.completePipe(file, output);

        nextDay = await getTomorrow(nextDay);
    }
}

}

请帮帮我?

解决了

做了几件事:

  • 向管道方法添加了标记

    管道(输出,{end:false})

  • 我没有为promise创建新函数,而是将以下代码放入其中:

    await new Promise((resolve) => {
        stream.once('finish',  () => {
            resolve();
        });
    });
    
  • 但是标签是它成功的原因,承诺只是一次整理

    getS3Obj(file) {
    
        return new Promise(async (resolve) => {
    
                const getParams = {
                    Bucket: this.bucket,
                    Key: file
                };
                resolve(this.s3.getObject(getParams, (err) => {
    
                    if (err) {
                        console.log('Error in getS3 object')
                    }
                }));
    
    
        })
    }
    
    await new Promise((resolve) => {
        stream.once('finish',  () => {
            resolve();
        });
    });