gpt4 book ai didi

javascript - 如何使抛出的错误在 Promise 之外可见?

转载 作者:行者123 更新时间:2023-12-02 14:22:23 25 4
gpt4 key购买 nike

我正在使用csv-parse用于流解析。对于每条记录,我需要调用一些函数 mapper.process() 。由于后一个函数返回一个 promise ,因此将其用 co 包裹起来。并添加前缀 yield .

parser.on('readable', function() {
var record;
while (record = parser.read()) {
return co(function*() {
yield mapper.process(record);
});
}
});

没有添加(删除第 4、6 行和 yield ),一切正常。然而,使用如上所示的解析器,抛出的错误会被吞掉。

如何解决这个问题?

最佳答案

这里的问题是,任何抛出的错误都会消失,因为 co 函数之后没有 catch 处理程序。

但更重要的是,while 循环内的 return 语句将导致整个函数返回,因此如果缓冲区中有多个记录,您将无法访问它们。

您可以编写以下代码来使其工作:

parser.on('readable', function() {
return co(function* () {
var record;

while (record = parser.read()) {
const result = yield mapper.process(record);

// do something with the result..
console.log('result is ', result);
}
})
.catch((err) => console.error(err));
});

但是,请注意,因为您正在“可读”回调中处理异步代码,所以您将导致函数立即返回。此行为将导致解析器在流末尾(并且可能在您实际完成数据处理之前)调用“finish”事件。

关于javascript - 如何使抛出的错误在 Promise 之外可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38550834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com