用小程序做东西时遇到一个异步问题,比如上传图片需要读取返回的真实地址时,因为小程序异步的原因,程序会继续往下执行
往往是图片还没传完,下一步的函数都运行完了,这个时候根本取不到真实地址。
查看了很多文章,大部分都说用Promise来阻塞异步解决, 但是看了下Promise的用法文章,可能我才疏学浅,没太搞懂。
后来我参考了一个高手写的代码,终于知道如何用了,具体原理我就不想深究了,使用套路写在下面:
我觉得不要做什么Promise API封装 不需要JS页面 import 这个封装函数,只会让人越搞越晕
let PromiseArr = []
PromiseArr.push(new Promise((reslove,reject)=>{
//这里写你想要阻塞的函数 ,比如wx.request 啊 wx.cloud.uploadfile啊 等等
success:res=>{
//这里写逻辑,比如获取图片云存储的真实地址 this.data.imagePath = res.fileId 等等
reslove();
}
}))
//关键的执行步骤
Promise.all(PromiseArr).then(res=>{
//这里就可以开始写下一步执行的函数了 ,甚至也可以做Promise的嵌套,再写一个在里面
this.setdata({
//把上一步获得的结果进行加工, 这样的就不会异步了。
images: this.data.imagePath
})
})
只要按照以上套路出牌,基本上是没问题的。
————————————————
版权声明:本文为CSDN博主「粗鲁的青蛙」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jarro/article/details/106688488