UniApp 微信小程序:在 onLaunch 中等待异步方法执行完成后,再调用页面中的接口

最近遇到了一个问题:在 App.vue 中的 onLaunch 中调用登录接口时,由于异步登录尚未完成就调用了 index 页面的接口,导致 token 异常。如何确保页面在 App 中的 onLaunch 执行完毕后再继续执行呢? 在网上查阅了一些资料,发现大多数解决方案涉及登录状态设置、页面通过轮询或消息通知等方式等待状态,这些方法都不太理想。

解决方案:

要确保在App.vue中的onLaunch调用登录接口完成后再调用index的其他接口,可以使用 Promise 来控制异步操作的执行顺序

1、在App.vue中,使用Promise封装登录接口的调用,并在登录成功后返回一个resolve。

javascript 复制代码
export default {
  onLaunch() {
    // 封装登录接口为一个Promise
    const loginPromise = new Promise((resolve, reject) => {
      // 调用登录接口
      loginFunction().then(() => {
        // 登录成功时,执行 resolve
        resolve();
      }).catch((error) => {
        // 登录失败时,执行 reject
        reject(error);
      });
    });

    // 将 loginPromise 作为一个全局变量
    this.globalData.loginPromise = loginPromise; 
  }
}

2、在index页面中,在页面加载时,通过调用登录接口的Promise,等待登录接口成功后再调用其他接口。

javascript 复制代码
export default {
  onLoad() {
    // 获取 App 实例
    const appInstance = getApp();

    // 等待登录接口的Promise完成后,再调用其他接口
    appInstance.globalData.loginPromise.then(() => {
      // 调用 index 页面的接口
      getIndexInfo().then((res) => {
        // 处理其他接口的结果
      }).catch((error) => {
        // 错误处理
      });
    }).catch((error) => {
      // 登录失败处理
    });
  }
}

测试通过完工 ~

可能有同学会有疑问,每次获取loginPromise的时候会不会每次都登录?

答案是不会的,App.vue 中的 loginPromise 是在 onLaunch 生命周期钩子中创建的 Promise 对象,该 Promise 对象只会在应用初始化时调用一次登录接口,并在登录成功后 resolve。之后,其他页面获取 loginPromise 时并不会触发再次登录,而是直接返回之前创建好的 Promise 对象。

这意味着,每次获取 loginPromise 时不会导致重复登录,而是仅返回之前创建好的 Promise 对象。这种方式确保了登录操作只会在应用启动时执行一次,避免了重复登录

相关推荐
考拉讲支付4 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
Newway3218 小时前
便利店小程序商城如何打通总部、门店与会员
小程序·小程序商城·会员运营·连锁便利店·门店订货·o2o系统
Strawberry969 小时前
小程序视频播放官方方案
小程序
weixin_1772972206912 小时前
二手旧物回收小程序先要解决的不是下单,是“上门之后价格变了怎么办“
小程序·apache
青企通12 小时前
电动车门店小程序:以旧换新估价、维修工单与电池档案的设计实现
小程序
努力变的更好12 小时前
H5与小程序之间的回调
前端·小程序·apache
镭封1 天前
自媒体内容生产怎么提速?文案整理、配音与剪辑流程
人工智能·小程序·音视频·语音识别·媒体
anyup1 天前
uView Pro X 1.0.0 发布:全面支持 uni-app x 蒸汽模式,80+ 组件
前端·uni-app·ai编程
科威网络1 天前
小程序开发性能优化:分包、预加载与启动时间
性能优化·微信小程序·小程序
zhongben123_1 天前
从零开发一个打车APP:技术选型、系统架构与成本评估指南
大数据·运维·ios·系统架构·uni-app·web app