Tengo una aplicación NodeJS y tengo dos bloques asincrónicos a los que llamo, pero la condición es que si el primer bloque devuelve un valor, no quiero activar el segundo bloque. Así es como se ve mi código:
//BLOCK 1 await canFunction1HandleID(id) .then( () => { const result = await functionOne(id); if(!result){ //throw error } return result; }) //BLOCK 2 await canFunction2HandleID(id) .then( () => { const result = await functionTwo(id); if(!result){ //throw error } return result; })Si el primer bloque devuelve un valor, solo quiero devolver ese valor y no ejecutar el segundo bloque. Pero ahora mismo se ejecutan ambos bloques, uno tras otro. ¿Alguna idea de por qué y cómo puedo lograr lo que estoy tratando de hacer aquí?
TIA.
¿Simplemente poner el primer valor en una variable?
const result1 = await canFunction1HandleID(id) .then(() => { const result = await functionOne(id); if (!result) { //throw error } return result; }); if (!result1) { const result2 = await canFunction2HandleID(id) .then(() => { const result = await functionTwo(id); if (!result) { //throw error } return result; }); };Si canFunction1HandleID y canFunction2HandleID son funciones que devuelven Promise<bool>, ¿qué pasa con lo siguiente?
//BLOCK 1 if (await canFunction1HandleID(id)) { const result = await functionOne(id); if (!result) { //throw error } return result; } //BLOCK 2 if (await canFunction2HandleID(id)) { const result = await functionTwo(id); if (!result) { //throw error } return result; }Si el primer bloque devuelve un valor, solo quiero devolver ese valor y no ejecutar el segundo bloque.
Suponga que lo que espera es: si functionOne tiene un retorno válido, úselo; de lo contrario, intente con functionTwo y arroje un error si no hay un retorno válido tampoco.
El código para implementar la lógica puede ser simplemente como:
const result = await functionOne(id).catch(()=>{}) || await functionTwo(id).catch(()=>{}); if (!result) { // throw error }