"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo devolver un valor resuelto de una función asíncrona dentro de otra función asíncrona?

¿Cómo devolver un valor resuelto de una función asíncrona dentro de otra función asíncrona?

Publicado el 2024-11-06
Navegar:164

How to Return a Resolved Value from an Async Function Within Another Async Function?

¿Cómo devolver un valor de una función asíncrona?

En el código proporcionado, el método init() devuelve una Promesa, pero el El método getPostById() intenta acceder directamente al valor devuelto por la Promesa. Para resolver esto, es necesario modificar el método init() para devolver el valor de getPostById() después de que se resuelva la Promesa.

Aquí está el código actualizado:

class Posts {
  constructor(url) {
    this.ready = false
    this.data = {}
    this.url = url
  }
  async init() {
      try { 
        let res = await fetch( this.url )
        if (res.ok) {
            let data = await res.json()

          // Do bunch of transformation stuff here

          this.data = data
          this.ready = true
          return this.getPostById(4)  // Return the value of getPostById()
        }
      } 
      catch (e) { 
         console.log(e)
      }
  }
  getPostById(id){
     return this.data.find( p => p.id === id )
  }
}  

Ahora, la función myFunc se puede escribir de la siguiente manera:

let myFunc = async () => {
   const postId = 4
   await allPosts.init()  // I need to wait for this to finish before returning

   // This is logging correct value
   console.log( 'logging: '   JSON.stringify(allPosts.getPostById( postId ), null, 4) )

   // Return the RESULT of allPosts.getPostById( postId ) ???
   return await allPosts.getPostById( postId )
}

Este código devolverá correctamente el valor de getPostById().

Declaración de liberación Este artículo se reimprime en: 1729216637 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3