收藏
回答

async 在真机中报错,开发者工具里不报错

框架类型 问题类型 终端类型 微信版本 基础库版本
小程序 Bug 客户端 7.0.4 2.7.5

//调用处

wx.getUserInfo({

 success: async (res) => {

   // 可以将 res 发送给后台解码出 unionId

   this.globalData.userInfo = res.userInfo

   // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回

   // 所以此处加入 callback 以防止这种情况

   if (this.userInfoReadyCallback) {

     this.userInfoReadyCallback(res.userInfo)

   }

   await this.login(res.userInfo.nickName);

 }

})


//login的方法

async login(nickName: string){

 let tempThis = this;

 let flag = 0;

 return new Promise((resolve) =>

 {

   wx.login({

     success: (res: any) => {

       if (res.code) {

         wx.request({

           method: 'POST',

           url: 'https://xxxxxxx',

           data: {

             name: nickName,

             code: res.code

           },

           success: (request: any) => {

             const res = request.data;

             tempThis.globalData.token = res.token;

             flag = 1;

             resolve({ status: flag});

           }

         });

       } else {

         console.log('获取用户登录态失败!' + res.errMsg);

         flag = 0;

         resolve({ status: flag});

       }

     }

   });

 });

}


在开发者工具中没有报错,在真机中报错






最后一次编辑于  2019-07-13
回答关注问题邀请回答
收藏

4 个回答

  • c'est la vie
    c'est la vie
    2019-08-29


    async await 需要Promise对象,你只对login方法进行了实例化,login里的ajax并没有,小程序原生ajax返回的并不是Promise对象,把获取token的接口另外写成一个函数,封装成promise,然后在  await this.login(res.userInfo.nickName); 下面 加载 await this.getToken(); 试一试

    2019-08-29
    有用
    回复
  • 鲤子
    鲤子
    2019-07-13

    把每个异步都抽离出来改写成promise,然后调用的时候都用同步调用。

    反正我封装微信小程序的request跟login都是这样封装的,并没有发现出错。

    2019-07-13
    有用
    回复
  • 老张
    老张
    2019-07-13

    你的login不是async

    2019-07-13
    有用
    回复 2
    • srammark
      srammark
      2019-07-13
      改了还是报错
      2019-07-13
      回复
    • 老张
      老张
      2019-07-13
      我一般是将wx.getUserInfo去promisify一下,然后await getUserInfo
      2019-07-13
      回复
  • 痛快科技
    痛快科技
    2019-07-13

    现在原生不支持吧,需要使用框架才可以

    2019-07-13
    有用
    回复 4
登录 后发表内容