«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как вернуть разрешенное значение из асинхронной функции в другой асинхронной функции?

Как вернуть разрешенное значение из асинхронной функции в другой асинхронной функции?

Опубликовано 6 ноября 2024 г.
Просматривать:447

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

Как вернуть значение из асинхронной функции?

В предоставленном коде метод init() возвращает Promise, но getPostById() пытается напрямую получить доступ к значению, возвращаемому Promise. Чтобы решить эту проблему, необходимо изменить метод init(), чтобы он возвращал значение getPostById() после разрешения Promise.

Вот обновленный код:

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

Теперь функцию myFunc можно записать следующим образом:

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

Этот код правильно вернет значение getPostById().

Заявление о выпуске Эта статья перепечатана по адресу: 1729216637. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3