提问人:Jason C 提问时间:6/26/2023 最后编辑:Jason C 更新时间:6/27/2023 访问量:31
将“错误”事件转换为本地异常
Converting 'error' events to local exceptions
问:
我正在使用 Node.JS 和提供事件的基于事件的 API(串行端口),我想通过当场抛出异常来处理错误。我明白这意味着我需要以更同步的方式做事。error
但是,我很难找到直接的方法来做到这一点。我想出如何做到这一点的唯一方法是使用中间承诺和 /,就像这个打开串行端口的例子一样(它有效但似乎是迂回的):async
await
import { SerialPort } from 'serialport';
import assert from 'node:assert';
// return port on success, throw something on error
async function openPort (path) {
const p = new SerialPort({path:path,baudRate:9600});
return await new Promise ((resolve, reject) => {
p.once('open', () => resolve(p));
p.once('error', e => reject(e));
}).catch(e => {
throw e;
});
}
// synchronously open the port and handle resulting exception
let port;
try {
port = await openPort('INVALIDPATH');
assert(port);
assert(port.port);
assert(port.port.isOpen);
console.log('port open');
} catch (e) {
console.log('failed:', e);
}
// continue doing other stuff (errors are not fatal)
console.log('continuing to do other stuff...');
我有两个问题:
- 在处理事件时,是否有更直接的方法可以使事件引发异常?
error
- 有没有办法做到以上,但打电话时不必使用?
await
openPort()
顺便说一句,我想我在上面的代码中看到了一个错误,其中事件处理程序将在成功打开时保持附加状态,因此如果以后发生错误,它将返回并调用该过时的事件处理程序。我想避免这种情况,因为以后可能会发生其他事件,我也想处理。once('error',...)
error
答: 暂无答案
上一个:不支持方法“GET”
评论
await