es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obteniendo un valor después de que la promesa se haya resuelto.

Estoy tratando de entender las Promesas lo mejor que puedo.

Me preguntaba si hay alguna manera de devolver los datos después de que la promesa se haya resuelto sin encadenar tanto como lo he hecho.

Básicamente, estaba tratando de agregar una nueva ubicación en el array “locs”.

loc.service.js:

export const locService = {
  getLocs,
};

const locs = [
{ name: ‘Granlugar’, lat: 32.047104, lng: 34.832384 },
{ name: ‘Nunca más’, lat: 32.047201, lng: 34.832581 },
];

function getLocs() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(locs);
}, 100);
});
}

map.service.js:

      const place = prompt('Ingrese el nombre del lugar');
      if (!place) {
        alert('Por favor, ingrese un valor válido');
      } else {
        locService.getLocs().then(locService.setLoc(place, event.latLng));
        locService.getLocs().then((locs) => {
          storageService.save(PLACE_KEY, locs);

Muchas gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de devolver los datos después de que la promesa se haya resuelto sin encadenar tantas instrucciones como has hecho hasta ahora. Puedes utilizar la sintaxis async/await para escribir código que parezca sincrónico pero que aún espere a que se complete una operación asíncrona. Aquí tienes un ejemplo de cómo puedes refactorizar tu código para usar async/await:

    export const locService = {
      getLocs,
      setLoc,
    };
    
    const locs = [
      { name: 'Greatplace', lat: 32.047104, lng: 34.832384 },
      { name: 'Neveragain', lat: 32.047201, lng: 34.832581 },
    ];
    
    function getLocs() {
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(locs);
        }, 100);
      });
    }
    
    function setLoc(place, latLng) {
      locs.push({ name: place, lat: latLng.lat(), lng: latLng.lng() });
    }
    
    async function saveLocs() {
      const place = prompt('Ingresa el nombre del lugar');
      if (!place) {
        alert('Por favor ingresa un valor válido');
      } else {
        const locs = await locService.getLocs();
        locService.setLoc(place, event.latLng);
        storageService.save(PLACE_KEY, locs);
      }
    }
    
    saveLocs();
    

    En este ejemplo, hemos definido una nueva función saveLocs que utiliza la palabra clave async para convertirla en una función asíncrona. Luego, utilizamos la palabra clave await para esperar a que la función getLocs resuelva su promesa antes de continuar con el resto del código. De esta manera, podemos acceder directamente al array locs sin tener que encadenar tantas promesas.

    Espero que esto te ayude a entender mejor las Promesas. Avísame si tienes alguna otra pregunta.

Comments are closed.