解决微信小程序开发中onLanch和onLoad的异步问题

微信小程序开发

小程序开发


浏览:955 次

APP中的Onlanch和主页索引。微信小程序开发过程中的vue vue中的onload异步问题。如何确保在同时触发onload时,先执行onlanch中的所有代码,然后在获得返回值后执行onload中的代码

例如,我想在app启动时获取openid或用户信息令牌。在返回所需数据之前,小程序将执行主页索引。vue中的onload导致后续代码不支持openid。没有openid,无法获取令牌。没有令牌,就无法请求任何数据。因此,用户打开页面时看不到任何内容

写一个deom

app。vue程序启动并异步使用计时器

导出默认值{

onLaunch:函数(){

安慰日志('项目已启动')

setTimeout(()=>{

安慰日志(“加载1”)

setTimeout(()=>{

安慰日志(“加载2”)

setTimeout(()=>{

安慰日志(“加载3”)

},1000)

},1000)

},1000)

}

};

在首页索引In vue onload上

加载(){

安慰日志('页面加载..')

setTimeout(()=>{

安慰日志(“第1页”)

setTimeout(()=>{

安慰日志('第2页')

setTimeout(()=>{

安慰日志('第3页')

},1000)

},1000)

},1000)

}

打印程序执行结果

snipaste_20200531_212039.png

执行命令

Onlanche同步=>Onload同步=>Onload异步=>Onlanch异步

解决1

定时器延迟onload中的代码,但这在实际开发中是不现实的,因为当用户的网络速度不好时,onlanche请求中的代码超过了定时器的时间范围,onload的代码将被执行,因此它仍然是空白的。当用户的网络速度良好时,代码不会加载得太快,而是在定时器运行后加载。这种限时解决方案不是真正的解决方案

决议2

ES6提供了一个承诺方案,这是一个很好的解决方案

什么是承诺?

1.主要用于异步计算

2.您可以对异步操作进行排队,以所需的顺序执行它们,并返回预期的结果

3.您可以在对象之间传递和操作promise,以帮助我们处理队列

基本用法:

<脚本>

函数runAsync(){

安慰日志(“准备洗澡”)

return new Promise(函数(resolve,reject){

//执行一些异步操作

setTimeout(函数(){

安慰日志(“洗澡完成”);

解决(“干净”);

}, 2000);

});

}

//如何使用?

运行异步()

.则((res)=>{

控制台日志(res);

})

取出您最初在APP中编写的onlanch代码。vue并编写新方法

函数login(){

return new Promise((resolve,reject)=>{

安慰日志('项目已启动')

setTimeout(()=>{

安慰日志(“加载1”)

setTimeout(()=>{

安慰日志(“加载2”)

setTimeout(()=>{

安慰日志(“加载3”)

//全部已成功加载,并且正在卸载onload

解决()

},1000)

},1000)

},1000)

})

}

//暴露

导出默认登录

在主页上加载

//导入

从“@/utils/token.js”导入登录名

login().然后(res=>{

安慰日志('页面加载..')

setTimeout(()=>{

安慰日志(“第1页”)

setTimeout(()=>{

安慰日志('第2页')

setTimeout(()=>{

安慰日志('第3页')

},1000)

},1000)

},1000)

})

执行过程

snipaste_20200531_ 224413.png

决议3

使用侦听器监视onlanche中的所有代码是否已执行

手表:{

//在onlanch中监控vuex中BOL的数据更改执行

“$store.state.bol”(){

//加载onlanch并修改vuex数据后,执行以下代码

安慰日志('页面加载..')

setTimeout(()=>{