Dentro de un método de controlador de nodo, tengo este bloque de código que me gustaría await
antes de continuar con el código que viene a continuación. ¿Cómo puedo hacer esto?
Pensé que esto debería hacerse con una Promesa (la única en ese método de controlador) y probé el código a continuación. Pero esto genera el siguiente error. ¿Qué estoy haciendo mal?
TypeError: el objeto no es iterable (no se puede leer la propiedad Symbol(Symbol.iterator))
const other = new Promise(async function () { updatedFields.last_login_at = newDateNow(); if (updatedFields.isActivated) { updatedFields.activated_at = newDateNow(); updatedFields.deactivated_at = null; } else if (updatedFields.isActivated === false) { updatedFields.deactivated_at = newDateNow(); updatedFields.activated_at = null; } }); await Promise.all(other); ... only when the Promise is completed, continue with the rest of the code
Cuando se crea una promesa, su estado es pendiente, y cuando la espera, espera hasta que se rechace o resuelva. Como no resuelves ni rechazas, no funciona.
const other = new Promise(async function (resolve,reject) { updatedFields.last_login_at = newDateNow(); if (updatedFields.isActivated) { updatedFields.activated_at = newDateNow(); updatedFields.deactivated_at = null; } else if (updatedFields.isActivated === false) { updatedFields.deactivated_at = newDateNow(); updatedFields.activated_at = null; } resolve(updatedFields) }); await Promise.all([other]);
Promise.all
toma una variedad de promesas! const other = new Promise(function(resolve, reject) { updatedFields.last_login_at = newDateNow(); if (updatedFields.isActivated) { updatedFields.activated_at = newDateNow(); updatedFields.deactivated_at = null; } else if (updatedFields.isActivated === false) { updatedFields.deactivated_at = newDateNow(); updatedFields.activated_at = null; } resolve(updatedFields); }); await Promise.all([other]);