JS嵌套的异步,如何同步?

2023-03-26 0 974
login(){
    const that = this
    wx.login({//异步1
      success: (res) => {
        that.getUrl('api/miniapp/index',{code:res.code}).then((res)=>{//异步2
          console.log(res);
        });
      },
      fail:(e)=>{
        console.log(e);
      }
    })
  }
......
async userlogin(){
     await getApp().login();
     console.log('111');
  },

原本以为用了async和await之后,会先打印出登录结果,结果发现先打印的是111
后来发现login函数还存在着两个异步,await只作用于最外层的login函数,并没有作用于内部的异步。我想让他们全部变成同步的咋整?

回答:

自定义的login函数需要返回promise才能await
需要等待登录接口后进行操作 可以尝试下面的方法

app.js
  login() {
    wx.login().then(async (res) => {
      let data = await getUrl({ code: res.code });
      this.globalData.token = data.token;
      wx.setStorageSync("TOKEN", data.token);
      if (this.callBack) {
        this.callBack();//回调函数
      }
    });
  },
 onLaunch() {
    const token = wx.getStorageSync("TOKEN");
    if (token) {
      // ...
    } else {
      this.login();
    }
 }
somepage.js
onLoad(options) {
    const token = wx.getStorageSync('TOKEN');
    // 小程序是异步加载的 app.js有异步操作 onload可能会比onLaunch先执行 而获取不到onLaunch的保存的数据
    // 通过回调解决此问题
    if (!token) {
      getApp().callBack = () => {
        // do something
      };
    } else {
       // do something
    }
  },

login没有返回一个Promise对象,自然是没办法通过await得到想要的结果的,改成这样就行了:

login() {
    return new Promise((resolve, reject) => {
        wx.login({ //异步1
            success: (res) => {
                this.getUrl('api/miniapp/index', {
                        code: res.code
                    })
                    .then((res) => { //异步2
                        console.log(res);
                        resolve(res);
                    });
            },
            fail: (e) => {
                console.log(e);
                reject(e);
            }
        })
    });
}
JS嵌套的异步,如何同步?
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 JS嵌套的异步,如何同步? https://www.jkxiazai.com/989.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务