Nestjs CsvReader未在异步/等待块中等待-已解决

Nestjs CsvReader未在异步/等待块中等待-已解决,nestjs,csvreader,Nestjs,Csvreader,我将csvReader与nestjs一起使用,并将“on”事件中的函数标记为async,将save to DB标记为wait “打开”事件似乎不会等待保存完成,并在处理文件后打印日志消息 代码如下所示: const CsvReadableStream = require('csv-reader'); const Fs = require('fs'); const path = require('path'); @EntityRepository(UserTitle) export class U

我将csvReader与nestjs一起使用,并将“on”事件中的函数标记为async,将save to DB标记为wait

“打开”事件似乎不会等待保存完成,并在处理文件后打印日志消息

代码如下所示:

const CsvReadableStream = require('csv-reader');
const Fs = require('fs');
const path = require('path');
@EntityRepository(UserTitle)
export class UserTitleRepository extends Repository<UserTitle> {
async seedUserTitle(): Promise<string> {
 // load titles
const basePath = __dirname.replace('/dist', '');
const filePath = path.join(basePath, 'titles.csv');
let inputStream = Fs.createReadStream(filePath, 'utf8');
let numRecs = 0;

inputStream
  .pipe(
    new CsvReadableStream({
      parseNumbers: true,
      parseBooleans: true,
      trim: true,
    }),
  )
  .on('data', async function (row: SeedTitleDto) {
    const seedTitle = new UserTitle();
    seedTitle.shortName = row[0];
    seedTitle.name = row[1];
    seedTitle.seq = row[2];

    try {
      await seedTitle.save();
      numRecs++;
      console.log(`Save ${numRecs}`);
    } catch (error) {
      if (error.code === '23505') {
        // duplicate username
        throw new ConflictException(
          `User Title ${seedTitle.shortName} already exists`,
        );
        return;
      } else {
        throw new InternalServerErrorException(error.message);
        return;
      }
    }
  })
  .on('end', function async(row: SeedTitleDto) {
    console.log(`End of file reached ${numRecs}`);
  });
  return `Created ${numRecs} titles`;
  }
}
const CsvReadableStream=require('csv-reader');
常数Fs=要求('Fs');
const path=require('path');
@实体报告(用户名)
导出类UserTitleRepository扩展存储库{
异步seedUserTitle():承诺{
//加载标题
const basePath=uu dirname.replace('/dist','');
const filePath=path.join(basePath,'titles.csv');
让inputStream=Fs.createReadStream(文件路径“utf8”);
设numRecs=0;
输入流
.烟斗(
新CsvReadableStream({
对,,
是的,
特里姆:没错,
}),
)
.on('data',异步函数(行:SeedTitleDto){
const seedTitle=新的UserTitle();
seedTitle.shortName=行[0];
seedTitle.name=行[1];
seedTitle.seq=行[2];
试一试{
等待seedTitle.save();
numRecs++;
log(`Save${numRecs}`);
}捕获(错误){
如果(错误代码=='23505'){
//重复用户名
抛出新的冲突异常(
`用户标题${seedTitle.shortName}已存在`,
);
返回;
}否则{
抛出新的InternalServerErrorException(error.message);
返回;
}
}
})
.on('end',函数异步(行:SeedTitleDto){
log(`End of file reated${numRecs}`);
});
返回`Created${numRecs}titles`;
}
}
有人知道如何让这个包允许异步处理吗


非常感谢

这可能会对您有所帮助。感谢这真的很有用,并为您提供了前进的道路