1

Estoy aprendiendo a aplicar Promise. Simulo que obtengo datos desde un servidor. Datos en const lista. con el .then() los obtengo en listaNueva. pero los datos no se guardan ahi, no puedo iterar en lista nueva. Intente dentro del .then() pushear lista a listaNueva. Concatenar. Pero no funciono. Como podria guardar los datos en mi lista local listaNueva e iterarlos desde ahi?

//emula a un servidor
const lista=[{name:"john", age:10, id:1},
            {name:"clark", age:12, id:2},
            {name:"mili", age:14, id:3},]

//tomo  los datos
const getData=new Promise ((resolve,reject)=>{
  setTimeout(()=>{
  return resolve (lista)
},2000)
  })

getData.then((listaNueva)=>{
  console.log(listaNueva)
})

//quisiera iterar en listaNueva y trabajar los datos localmente
listaNueva.map(item=>{
 console.log(item)}
Nam
  • 71
  • 4
  • Acabo de copiar y pegar los datos en un jsfiddle, y el resultado de la promesa se muestra correctamente en la consola. También pude imprimir cada elemento en un `.forEach()`. Cuál es el problema? – Arriel Mar 24 '22 at 14:36
  • Hola. agregue una edicion, cuando quiero trabajar los datos de listaNueva fuera de la funcion .then, no puedo. Lei que solo existen los datos dentro de la funcion. Lo que yo quisiera es obtener los datos del servidor, guardarlos en una lista local para poder iterarlos y luego mostrarlos en un html. Aunque como estoy aprendiendo desconzco si la metodologia de trabajo es asi. – Nam Mar 24 '22 at 14:41
  • o quizas deberia trabajarlo todo dentro del .then o dentro del .then pushear a una lista fuera de la funcion, aunque eso no resulto – Nam Mar 24 '22 at 14:47
  • Debés retornar la lista nueva y asignarla a una variable. – padaleiana Mar 24 '22 at 14:48
  • Pues, no hay nada de malo en crear una copia local. Sólo crea la variable que la contenga y la asignas en el then – Arriel Mar 24 '22 at 14:49
  • algo asi? let a=getData.then((listaNueva)=>{ return listaNueva //a=listaNueva }) console.log("a",a) me trae promise peding, el a fuera del .then. o si hago a=listaNueva dentro de la funcion then, tampoco funciona quizas lo mejor sea trabajar todo dentro del .then – Nam Mar 24 '22 at 15:07
  • 1
    @Nam La resulción de la promise es asincronica, esto quiere decir para trabajar con los datos que serán obtenidos en algún momento en el futuro tenes que, o pocesarlos dentro del `.then` o usar [`await/async`](https://es.javascript.info/async-await). Puede que [esta pregunta](https://es.stackoverflow.com/q/277690/16597) te sea de ayuda – Marcos Mar 24 '22 at 15:20

1 Answers1

-1

Podria sera algo asi:

const lista=[{name:"john", age:10, id:1},
            {name:"clark", age:12, id:2},
            {name:"mili", age:14, id:3},]

const getData=new Promise ((resolve,reject)=>{
  setTimeout(()=>{
  return resolve (lista)
},2000)
  })

getData.then((listaNueva)=>{
  listaNueva.map(el => console.log(el))
})
Hernán Garcia
  • 1,331
  • 3
  • 12