javascript - ¿Cómo evitar la duplicación de lógica al promisificar métodos de js?
Recientemente adopté el patrón de encadenamiento de promesas. Es muy conveniente hacerlo así:
action1
.then(()=> action2())
.then(()=> action3());
Pero, para hacerlo cambié todos mis métodos así (TypeScript):
action1() : Promise<any>{
try{
// actual code
return Promise.resolve();
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
Esto parece un patrón muy repetitivo. ¿Cuál es la mejor manera de evitar la duplicación de código?
Respuesta #1
Escribe una función para envolver una promesa sobre una función y puedes reutilizarla
wrapPromise(fun) : Promise<any>{
try{
var value = fun()
return Promise.resolve(value);
} catch (err){
console.error(err);
return Promise.reject(err);
}
}
wrapPromise(action1).then()
Respuesta #2
Dado que estás usando TypeScript, querrás usar async/await. Simplemente haz
async action1(): Promise<any>{
try {
return // actual code;
} catch (err){
console.error(err);
throw err;
}
}
Sin embargo, hay una buena posibilidad de que en realidad no quieras capturar, registrar y volver a lanzar todos los errores en cada función, así que esto se simplifica a
async action1(): Promise<any>{
return // actual code;
}
