Да, но не так. Вы должны будете обернуть эти вещи в обещание, чтобы вы могли «вернуться» из своего await
, как только данные поступят как часть вашей обработки «вкл»:
async function doesSocketAgree(){
socket.emit('doesOtherSocketAgree', otherSocketId);
await new Promise(resolve => {
socket.on('responseDoesSocketAgree', answer => {
resolve(answer);
});
});
}
И вы возможно, захочет удалить этого слушателя перед вызовом resolve()
, чтобы он не продолжал запускаться, потому что каждый раз, когда вы вызываете doesSocketAgree()
, вы добавляете нового слушателя в кучу "on: responseSocketAgree". Так что в конечном итоге все пойдет не так, как надо без очистки.
На этой ноте вы, вероятно, захотите выдать свое "согласен?" со случайным токеном, который может проверить ваш обработчик on
, тот, который ограничен текущим вызовом функции, "потому что asyn c".