Tengo esta función en mi ruta expresa que actualiza la información de un usuario y su función. El rol es otro objeto Sequelize y he establecido una relación de uno a muchos:
User.belongsTo(Role); Role.hasMany(User);En mi ruta, esta es mi función de actualización:
const UpdateUser = async user => { if (Object.keys(user).length !== 0) { const { id, firstName, lastName, phone, email, role } = user; let modUser = await User.findOne({ where: { id }, include: [{ model: Role}] }); if (modUser.firstName !== firstName) modUser.firstName = firstName; if (modUser.lastName !== lastName) modUser.lastName = lastName; if (modUser.phone !== phone) modUser.phone = phone; if (modUser.email !== email && UniqueEmail(email)) modUser.email = email; if(modUser.Role.id !== role) { await modUser.setRole(await Role.findByPk(role)); } modUser.save(); modUser = await User.findOne( { where: { id }, include: [{ model: Role}], attributes: { exclude: ['RoleId', 'password'] } }, ); return modUser.reload(); } return { error: "No user found" }; }La función funciona bien actualizando la información y el nuevo rol en la base de datos, el problema es que el usuario que regresa, a veces no tiene la información actualizada, sino la información anterior. No estoy seguro de si estoy implementando esto incorrectamente, o si intento actualizar el modelo de usuario y luego asignar un nuevo rol en ese momento está rompiendo algo.
¿Algunas ideas? ¡Gracias!
La mayoría de los métodos de secuenciación son asincrónicos... No estaba usando mis palabras clave de espera para permitir que el código asincrónico se resolviera antes de continuar.
await modUser.reload(); await modUser.save();Gracias a @Heiko TheiBen