¿Puedo disparar y olvidar una promesa en nodejs (ES7)?

Me gustaría ejecutar este código con babel:

redisClientAsync.delAsync('key'); return await someOtherAsyncFunction(); 

dentro de una función asíncrona sin esperar la primera línea. ¿esta bien?

¿De qué otra manera puedo ejecutar algo que no me importa?

¿Puedo simplemente disparar la función no promisificada del (‘key’, null) sin una callback?

Sí, puede hacerlo y ejecutará las dos funciones asíncronas en paralelo. Acabas de crear una promesa y la desechaste.

Sin embargo, esto significa que cuando se rechaza la promesa no se dará cuenta. Obtendrá finalmente una unhandledRejection .

¿Esta bien? ¿Cómo puedo ejecutar algo que no me importa?

Probablemente no está bien. Si realmente no te importa, no lo has ejecutado en primer lugar. Por lo tanto, debe ser claro y explícito sobre lo que le importa (y lo que no):

  • ¿quieres esperar? (para efectos secundarios)
  • ¿necesitas el resultado?
  • ¿quieres atrapar excepciones?

Si solo desea esperar y no le importa el valor del resultado, puede descartar fácilmente el resultado:

 void (await someAsyncFunction()); // or omit the void keyword, // doesn't make a difference in an expression statement 

Si no le importan las excepciones, puede ignorarlas usando

 … someAsyncFunction().catch(function ignore() {}) … 

Puedes tirar eso, esperarlo, hacer cualquier cosa con él.

Si quieres el resultado, tienes que esperarlo. Si le importan las excepciones, pero realmente no quiere esperar, puede ejecutarlas en paralelo con las siguientes funciones:

 var [_, res] = await Promise.all([ someAsyncFunction(), // result is ignored, exceptions aren't someOtherAsyncFunction() ]); return res; 

dentro de una función asíncrona sin esperar la primera línea. ¿esta bien?

Sí, hay casos en los que desearía hacer esto que son perfectamente razonables. Especialmente cuando no le importa el resultado; un ejemplo es una operación de rastreo de análisis que no debe interferir con el código crítico de la empresa.

¿De qué otra manera puedo ejecutar algo que no me importa?

En muchos sentidos, sin embargo, simplemente funciona la llamada a la función promesa. Su del sin callback probablemente funcionaría en este caso, pero algunas funciones no protegen contra no pasar devoluciones de llamada, por lo que puede pasar una función vacía en su lugar ( .del('key', () => {}) ).

Sin embargo, debes asegurarte de que sabes que falla, incluso si no quieres interrumpir el funcionamiento del código, así que considera agregar un process.on("unhandledRejection', controlador de eventos para ignorar explícitamente estas excepciones particulares o suprimirlos a través de:

 redisClient.delAsync('key').catch(()=>{}); 

O preferiblemente, algo como:

 redisClient.delAsync('key').catch(logErr);