为了账号安全,请及时绑定邮箱和手机立即绑定

异步函数不返回值,但是控制台日志()做:如何做?

异步函数不返回值,但是控制台日志()做:如何做?

BIG阳 2019-07-26 15:14:03
异步函数不返回值,但是控制台日志()做:如何做?我有ES6课程init()方法负责获取、转换数据,然后更新类的属性this.data新转换的数据。到目前一切尚好。这个类本身有另一个getPostById()方法,只做听起来像的事。下面是这个类的代码: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 data        }       }        catch (e) {           console.log(e)       }   }   getPostById(id){      return this.data.find( p => p.id === id )   }}直截了当,除了我有一个async/await机制init()方法。现在,此代码将正确工作:let allPosts = new Posts('https://jsonplaceholder.typicode.com/posts')allPosts.init()         .then( d => console.log(allPosts.getPostById(4)) )// resulting Object correctly logged in console但是它只会被打印到控制台上:我如何使用allPosts.getPostById(4)作为return某项功能?比如: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) )    // How can I return the RESULT of allPosts.getPostById( postId ) ???    return allPosts.getPostById( postId )}myFunc()返回Promise但不是最终价值。我读过几篇关于这一主题的相关文章,但它们都给出了日志记录的例子,再也没有回来过。这是一把小提琴这包括两种处理方法init()*使用Promise和使用async/await..无论我尝试什么,我都无法使用getPostById(id).这个职位的问题是:如何创建一个函数,该函数将返回getPostById(id) ?编辑:许多好的答案试图解释什么是承诺的主要执行循环。经过大量的视频和其他很好的阅读之后,下面是我现在所理解的:我的职能init()正确返回。但是,在主事件循环中:它返回承诺,那么我的工作就是从有点并行循环(不是一个新的真正线程)。为了捕获并行循环的结果,有两种方法:使用.then( value => doSomethingWithMy(value) )使用let value = await myAsyncFn()..现在是愚蠢的打嗝:等待只能在async职能:P因此,它本身就返回了一个承诺,可以用在await应该嵌入到async函数,该函数可用于await等等.。这意味着我们不能真正等待承诺:相反,我们应该无限期地捕获并行循环:.then()或async/await.谢谢你的帮助!
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信