"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment renvoyer une valeur résolue à partir d’une fonction asynchrone dans une autre fonction asynchrone ?

Comment renvoyer une valeur résolue à partir d’une fonction asynchrone dans une autre fonction asynchrone ?

Publié le 2024-11-06
Parcourir:153

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

Comment renvoyer une valeur à partir d'une fonction asynchrone ?

Dans le code fourni, la méthode init() renvoie une promesse, mais la La méthode getPostById() tente d'accéder directement à la valeur renvoyée par la promesse. Pour résoudre ce problème, la méthode init() doit être modifiée pour renvoyer la valeur de getPostById() une fois la promesse résolue.

Voici le code mis à jour :

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

Maintenant, la fonction myFunc peut être écrite comme suit :

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

Ce code renverra correctement la valeur de getPostById().

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729216637. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3