非同期関数から値を返す方法
提供されたコードでは、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() の値を正しく返します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3