Я использую socket.io, и я хотел бы преобразовать функцию обратного вызова в простую функцию, основанную на обещании, где я могу вернуть значение.Как преобразовать этот аргумент обратного вызова в обещание?
Я пытаюсь преобразовать подтверждение здесь: socket.io/docs/#sending-and-getting-data-(acknowledgements)
socket.on('getGames', (data, callback) => {
Game.find(data)
.then(data => callback(data)); //explicit call to callback
});
Я хотел бы вызвать функцию вместо того, чтобы такие как:
socketEvent(socket, 'getGames')
.then((data) => {
return Game.find(data); //returns a promise and can be chained
});
Я думаю, что-то вроде:
//this doesn't work
const socketEvent = (socket, name) => {
return new Promise(function (resolve, reject) {
socket.on(name, (data, callback) => {
resolve((data) => callback(data));
});
});
};
Возможно, вы вообще не должны. Сокет может запускать событие несколько раз, обещание - неправильный инструмент для его представления. – Bergi
Ну, в любом случае, он будет срабатывать обратный вызов несколько раз. Контекст не так важен - мне все равно хотелось бы узнать, как преобразовать явный обратный вызов, как указано выше, в обещание. – Nazzanuk
Обещание * не может * срабатывать несколько раз, вам там не повезло. В общем случае см. [Как преобразовать существующий API обратного вызова в обещания?] (Http://stackoverflow.com/q/22519784/1048572) – Bergi