Tengo el siguiente bloque de código:
async done() => { return new Promise((resolve, reject) => { const events = new Map(); events.set('CLOSE_CLICK_EVENT', () => { //other logic resolve(false); }); } }Estoy tratando de eliminar la "otra lógica" a una función externa. Mi otro enfoque es el siguiente:
enfoque revisado:
async done() => { return new Promise((resolve, reject) => { const events = new Map(); events.set('CLOSE_CLICK_EVENT', () => { return this._doneCloseButtonHandler(events); }); } } async _doneCloseButtonHandler(events) { //other logic return false; }Sin embargo, el segundo enfoque no parece comportarse de la misma manera: ¿por qué la Promesa se resuelve de manera diferente? La Promesa no parece resolverse cuando trato de usar el segundo enfoque.
En el segundo enfoque, nunca está llamando a la función de resolve , por lo que no puede resolverse, debe encadenarlo:
return this._doneCloseButtonHandler(events).then(resolve, reject); Editar: según la solicitud de OP, también hay una forma de resolver dentro de la función _doneCloseButtonHandler cuando pasa la resolve como argumento:
return this._doneCloseButtonHandler(events, resolve) // ... function _doneCloseButtonHandler(event, resolve) { // .... resolve() }Para extraer la "otra lógica", primero debe refactorizar su función para
async done() { const _ = await new Promise((resolve, reject) => { const events = new Map(); events.set('CLOSE_CLICK_EVENT', resolve); // do something with `events` }); // other logic that should happen when the CLOSE_CLICK event occurs return false; } (el _ corresponde a lo que se pasará a la llamada de resolve ).
Luego puede extraer la otra lógica en una función separada.