Nodejs转换-在推送之前调用回调是否可以视为一种好习惯?

时间:2018-08-28 17:03:00

标签: node.js concurrency nodejs-stream

关于stream.transform的转换功能:
可以,因为它不会破坏背压机制,
并假设我不在乎顺序,在调用push()之前先调用callback(),以便我可以异步地同时处理多个块?

具体地说,我想发出异步http请求。 我有一个“网址流”,我想将处理后的结果push()进行进一步的处理/存储。

如果在调用callback()之前等待请求完成,则每次只会运行1个请求。 但是,如果我在请求进行过程中呼叫回调:

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

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

代码似乎可以使用,但是我想知道是否滥用了stream.Transform以及是否应该为这种管道完全使用其他内容。

1 个答案:

答案 0 :(得分:1)

这破坏了流的设计。

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

例如:

urlStream.on('data', (url) => {
  request.get(url, (err, res) => {
    // do whatever you want to do next.
  });
});