我不知道如何
resolve
上的承诺
send()
函数,如果
socket.write()
导致错误,nodejs
套接字不引发异常
写入操作出错时
而我还是接到了
this.socket.on('error',..)
回调如果在我写入套接字时出错,但仍然无法解析承诺,因此调用
被卡住了
我想要的是,用户只需使用
send().then((result) => {})
,如果有错误,他们可以在
result
论点
socket.on('error',(err) => {
console.error(err); //if there are error this will be called
});
async send(data){
return new Promise(resolve, () => {
try{
socket.write(data, 'binary',() => {
resolve(true); //data sent, resolve the promise
});
}
catch(e){ //nodejs socket.write does not throw exception
resolve(false);
}
})
}
//call send, and wait for results
send({..}).then((result) => {
if(result === true){
//send success
}
else {
//send failed
}
});
这一个按预期工作,当出现错误时,承诺仍然解决
async send(data){
return new Promise(resolve, () => {
try{
let errorHandler = (err) => {
resolve(false);
}
socket.once('error', errorHandler);
socket.write(data, 'binary',() => {
socket.off('error', errorHandler);
resolve(true); //data sent, resolve the promise
});
}
catch(e){ //nodejs socket.write does not throw exception
resolve(false);
}
})
}
但是
有没有更好的解决方案?
,因为我不想创建匿名函数并调用
on('error',)
和
off('error',)
每次
发送()
已调用函数