"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como retornar um valor resolvido de uma função assíncrona dentro de outra função assíncrona?

Como retornar um valor resolvido de uma função assíncrona dentro de outra função assíncrona?

Publicado em 2024-11-06
Navegar:114

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

Como retornar um valor de uma função assíncrona?

No código fornecido, o método init() retorna uma promessa, mas o O método getPostById() está tentando acessar o valor retornado pela Promise diretamente. Para resolver isso, o método init() precisa ser modificado para retornar o valor de getPostById() após a promessa ser resolvida.

Aqui está o código atualizado:

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 )
  }
}  

Agora, a função myFunc pode ser escrita da seguinte forma:

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 retornará corretamente o valor de getPostById().

Declaração de lançamento Este artigo foi reimpresso em: 1729216637 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3