我们知道,页面load好后,会启动onLoad;页面show好后,会启动onShow,那如果我的onLoad写的很复杂,执行时间特别长,等到页面show
好后,它还没有执行完,那这个时候onshow会开始执行吗?还是会等到onLoad执行完,才开始执行?或者我这么问,load页面和show页面肯定是在一个线程里执行,但是onload和onshow也在这个线程里吗?如果是,那么肯定串行执行:“load页面--》onload--》show页面--》onshow”。如果不是,就是说系统会另外开一个线程执行onload和onshow,并且是onload新开一个线程,onshow也新开一个线程,那“load页面、onload、show页面、onshow”肯定就不是串行的。
那到底是怎样的?请高手解答。
看文档是串行 https://developers.weixin.qq.com/miniprogram/dev/guide/framework/page-life-cycle.html
在onload 和 onShow第一行分别打了一行console
onload和onshow分别请求服务器,并在请求回执成功时输出服务器返回结果。
onLoad:{
console.log("1");
wx.request(res=>{console.log("load request success")});
}
onShow:{
console.log("2");
wx.getSetting(
success:{
console.log("onshow getsetting success")
wx.request(res=>{
console.log("onShow request success");
})
}
)
}
实测: onload和onShow的console在很短的时间内显示,但是后续的完全错乱了。甚至在APP.JS中的请求都在这之后才显示成功。如下为记录:
1
2
onshow getsetting success
onShow request success
load request success
我的理解是 微信小程序中 想要顺序执行代码 只能不断的用promise 回调。太坑了
onload 里写了一个request的方法,
onshow也写了一个request 方法的。
看调试器的执行时间轴,2个request 是几乎同步执行的。
其实实践大于理论