将流与承诺相结合

时间:2016-03-20 14:36:30

标签: node.js csv asynchronous promise

我对文件有一些操作,如下所示:

  1. 从远程服务器下载zip文件(包含.csv文件)
  2. 解压缩
  3. 解析csv
  4. 将其更改为具有某种结构的对象
  5. 将对象放入DB。
  6. 我想使用流来解析CSV并逐行将行放到DB中。问题是我不知道如何将流与promises结合起来。我的代码示例

    function processFile(filename) {
      return fileManager.downloadFile(filename)
        .then(filename => {
          console.log('file downloaded');
          return fileManager.extractZip(path.join(process.cwd(), 'tmp', `${filename}.zip`));
        })
        .then(filename => {
          fs.createReadStream(path.join(process.cwd(), 'tmp', `${filename}.csv`))
            .pipe(csvParser)
            .on('data', data => {
                  //saveSingleItem returns Promise
                  saveSingleItem(prepareItem(data));
            })
            .on('error', err => console.log(err))
            .on('end', () => console.log('end'));
        })
        .catch(err => console.log(err));
    }
    

    我想知道这个序列何时结束。 Promise.all可能会以某种方式提供帮助但我不知道如何检测来自saveSingleItem方法的promises和来自.csv文件的行的两个prom解析/结束。

0 个答案:

没有答案