1

我有一些看起来像这样的代码

try {
return inputStream
  .pipe(JSONStream.stringify())
  .on('error', e => next(`Stringify error: ${e}`))
  .pipe(Json2csvTransform)
  .on('error', e => next(`json2csv error: ${e}`))
  .pipe(res)
  .on('finish', () => console.log("Streaming of file is now complete."))
 } catch(error) {
return res.status(400).json({ message: msg('fileRetrievalError', -3) })
}

当我到达.on('error', e => next('json2csv error: ${e}'))

这个过程并没有落入catch,它只是继续保持下去。我猜这是因为它被包裹在一个next

我终于能够提取的错误是:

Error: Data should not be empty or the "fields" option should be included

我试图挖掘节点模块中的源代码,但这对我来说意义不大。

我想我有两种可能的解决方案:要么我需要了解错误的Json2csv含义,要么我需要能够退出并关闭我的流。我试图只是推return res.status(400).json({ message: msg('fileRetrievalError', -3) })入回调.on('error;),但如果进程失败一次,它每次都会失败,直到会话结束,即使提供所有有效信息 - 如果这有意义..

我对节点知之甚少,而且这个包没有太多的支持。

4

1 回答 1

1

如果要在处理特定错误后停止处理流,则必须抛出错误:

.on('error', e => throw error.message)
于 2018-10-17T04:52:48.207 回答