节点流 - 在完成流时使同步返回数组。

时间:2015-01-01 23:59:26

标签: node.js stream

我写了这个函数来从流中提取文件列表。它工作正常,但是流是异步的,并且在流完成之前返回files数组。我真的不想使用promise库...尽量保持代码轻巧。流完成后如何返回files数组?

function fileList(source) {
    var files = [];
    source.pipe(through2.obj(function(obj, enc, next) {
        file = obj.history[0].split("/").pop();
        files.push(file);
        next();
    }));

    return files;
}

1 个答案:

答案 0 :(得分:1)

提供回调而不是从函数返回值:

function fileList(source, callback) {
  var files = [];
  source.pipe(through2.obj(function(obj, enc, next) {
    file = obj.history[0].split("/").pop();
    files.push(file);
    next();
  }, function(flushcb) {
    flushcb();
    callback(null, files);
  }));
}

// ...

fileList(stream, function(err, files) {
  if (err) throw err;

  // use `files` here ...
});