async/await 多级调用后就不起作用了?


<button open-type="getUserInfo" @getuserinfo="bindGetUserInfo">提交</button>

export default {
  methods: {
    bindGetUserInfo(e) {
       //省略代码  获取用户信息
       this.submitForm()
    },
    submitForm() {
       //省略代码 处理表单数据
       this.login()
    },
     async login () {
      wx.login({
        success:async res => {
          let code = res.code;
          if (code) {
            this.submitData['code'] = code

            const data = await Api.Login(this.submitData);  //ajax请求
            if (data.errcode === 0) {
            //省略
            }

代码中ajax请求是在login方法中定义的,点击button调用的顺序是bindGetUserInfo -> submitForm -> login,await 却没有等待,我换成

export default {
  methods: {
    async bindGetUserInfo(e) {
       //省略代码  获取用户信息
       await this.submitForm()
    },
    async submitForm() {
       //省略代码 处理表单数据
       await this.login()
    },
     async login () {
      wx.login({
        success:async res => {
          let code = res.code;
          if (code) {
            this.submitData['code'] = code

            const data = await Api.Login(this.submitData);  //ajax请求
            if (data.errcode === 0) {
            //省略
            }

这样也不行,不知道什么原因?

阅读 3.9k
2 个回答

await 后面的方法需要返回一个promise.确保这一点是没有问题的。这里login方法并没有返回promise.

   async login () {
    await new Promise((resolve, reject) => {
      wx.login({
        success: res => {
          resolve(res)
        },
        error: err => {
          reject(err)
        }
      })
    })
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题