Estoy pasando un cursor mongo llamado resources a esta función. Quiero reestructurar los recursos creando un objeto vacío y usando la notación de corchetes para guardar los recursos en el objeto. Pero no hace falta: simplifiqué mi código tanto como pude para demostrar cómo se comporta de manera completamente diferente a lo que esperaría.
No sé por qué Mongo estaría involucrado aquí porque typeof r.id === string , pero quería mencionar eso. Especialmente porque, cuando itero a través de una estructura de datos diferente con .forEach , esto no es un problema.
Estoy usando mecanografiado.
const restructured_resources = async(resources: any, db: any) => { let restructured_resources: any = {} resources.forEach((r: any) => { const id = r.id restructured_resources[id] = "yo" }) console.log(restructured_resources) //{} })Al agregar la palabra clave await delante de la función forEach, el objeto se completa con los pares de valores clave deseados. Esto me lleva a creer que iterar a través de un cursor Mongo con un bucle forEach no es una tarea síncrona normal y se pone en cola después de la instrucción console.log .
const restructured_resources = async(resources: any, db: any) => { const thing: any = {} await resources.forEach((resource: any) => { restructured_resources[resource.id] = "yo" }) console.log(restructured_resources)Esto debería funcionar, así que si no es así, probablemente sea un problema async .
const restructured_resources = (resources) => { let restructured_resources = {} resources.forEach((r) => { const id = r.id restructured_resources[id] = "yo" }) console.log(restructured_resources) //{} } restructured_resources([{id: 1},{id: 2},{id: 3},{id: 4},{id: 15},]);