1

关于stream.Transform的transform函数:
可以吗,因为它不会破坏诸如背压机制之类的东西,
并且假设我不关心顺序,在调用push()之前调用callback()以便我可以同时异步处理超过 1 个块吗?

具体来说,我想发出异步 http 请求。我有一个“url 流”,我想 push() 处理后的结果以供进一步处理/存储。

如果我在调用 callback() 之前等待请求完成,我每次只会运行 1 个请求。但是,如果我在请求播出时调用回调:

request.get(url, (err, res) => push(process(res)));
return callback();

我可以同时处理许多请求。

该代码似乎有效,但我想知道我是否在滥用 stream.Transform 以及我是否应该为这种管道完全使用其他东西。

4

1 回答 1

2

这打破了流的设计。

如果您不关心背压或流的顺序,请不要使用流。假设您的“url 流”只是一个可读流,直接使用它并在此时停止使用流。您可能还想考虑为什么要使用 URL 流,但我不想过多地判断。

举个例子:

urlStream.on('data', (url) => {
  request.get(url, (err, res) => {
    // do whatever you want to do next.
  });
});
于 2018-08-28T17:47:49.883 回答