调用组件中的方法时 await 应该怎么用?

onLoad(options) {
      this.requestUrl = 'users/' + options.user_id + '/topics'
      // 组件数据改变,也需要调用 this.$apply()
      this.$apply()
      // 调用组件 reload 方法
      this.$invoke('topiclist', 'reload')
    }
    // 下拉刷新
    async onPullDownRefresh() {
      // 调用组件 reload 方法
      await this.$invoke('topiclist', 'reload')
      wepy.stopPullDownRefresh()
    }
    // 上拉加载更多
    async onReachBottom () {
      // 调用组件 loadMore 方法
      this.$invoke('topiclist', 'loadMore')
    }

这里的 onPullDownRefresh 方法中 在调用子组件的时候,加入了 await this.$invoke('topiclist', 'reload'),在 onLoad 方法中,同样是调用子组件的 reload 为什么此时不用 await

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
liyu001989
最佳答案

得理解一下异步和回调,如果不适用 await,我们在某个异步操作 A 执行完成后再执行 B 逻辑时,就需要在 A 执行成功的回调函数中写 B 的逻辑。

比如

A({
  success: function() {
    B()
  }
})

或  A.then(B)

适用了 await 呢就是把异步的操作变成同步的

await A();
B()

等待 A 异步执行完成后,再执行 B。如果上面这些你还不理解,可以再查查 await 的文档。

那么 onPullDownRefresh 中,我们需要等待 reload 执行完成后,再调用 stopPullDownRefresh,告诉微信已经下拉刷新完了。onLoad 方法是首次加载,异步操作后并没有什么其他逻辑,所以不需要 await。

5年前 评论
讨论数量: 4
liyu001989

得理解一下异步和回调,如果不适用 await,我们在某个异步操作 A 执行完成后再执行 B 逻辑时,就需要在 A 执行成功的回调函数中写 B 的逻辑。

比如

A({
  success: function() {
    B()
  }
})

或  A.then(B)

适用了 await 呢就是把异步的操作变成同步的

await A();
B()

等待 A 异步执行完成后,再执行 B。如果上面这些你还不理解,可以再查查 await 的文档。

那么 onPullDownRefresh 中,我们需要等待 reload 执行完成后,再调用 stopPullDownRefresh,告诉微信已经下拉刷新完了。onLoad 方法是首次加载,异步操作后并没有什么其他逻辑,所以不需要 await。

5年前 评论

@liyu001989 那么在方法 onReachBottom 中的 await 是否也可以去掉呢?

5年前 评论
liyu001989

可以

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!