「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 別の非同期関数内の非同期関数から解決された値を返す方法

別の非同期関数内の非同期関数から解決された値を返す方法

2024 年 11 月 6 日に公開
ブラウズ:959

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

非同期関数から値を返す方法

提供されたコードでは、init() メソッドは Promise を返しますが、 getPostById() メソッドは、Promise によって返された値に直接アクセスしようとしています。これを解決するには、Promise が解決された後に getPostById() の値を返すように init() メソッドを変更する必要があります。

更新されたコードは次のとおりです:

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