У меня есть проблема, как resolve
обещание для функции send()
, если socket.write()
приводит к ошибке, сокет nodejs не генерирует исключение , когда операция записи является ошибкой
пока я все еще получаю уведомление от this.socket.on('error',..)
обратного вызова, если во время записи в сокет произошла ошибка, но я все еще не могу разрешить обещание, поэтому вызов send()
застрял
что яхочу, чтобы пользователь мог просто использовать 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',)
каждый раз, когда вызывается функция send()