小程序中解决代码同步执行的问题

互联网 20-7-2
在做小程序的时候,是不是经常遇到这两种同步问题:

1.使用for循环,一个循环里面的操作还没结束,下一个循环就已经开始了。如果循环之间没有互相依赖,问题应该还不大,但是如果下一个循环的开始依赖于上一个循环的结果,那这一系列操作就会出现问题,比如画图:

for (let index in images) {       //每画一张图,都要在上一张图画结束才能开始,因为要计算画图位置       ctx.drawImage }

2.调用服务器接口访问数据、下载图片等,服务器还未返回数据,代码已经继续执行其他代码了,这明显会出问题。

wx.downloadFile({       url: URL,       success(wr) {       //如果其他执行代码在success代码块里面,还能保证在成功获取数据后正常执行       //如果下载功能是共用的,其他操作逻辑肯定就会抽离出来,这样就保证不了同步执行了。       } });
/**    * 处理图片    */   handleOneImage: function(ctx, images, idx) {     let that = this;     let oneImage = images[idx];     let pro = new Promise(function(resolve, reject) {       if (oneImage == undefined) {         //画图结束         //执行一系列操作       } else {         //成功画图结束,执行下一张图的操作         that.drawOneImage(ctx, oneImage, that.data.xp).then(isSuccess => {           if (isSuccess == 'success') {             that.handleOneImage(ctx, images, idx + 1);           }         });       }     });     return pro;   },   /**    * 画图片    */   drawOneImage: function(ctx, image, xp) {     let that = this;     //保证获取图片信息、画图等操作同步进行结束再返回结果     let pro = new Promise(function(resolve, reject) {       wx.getImageInfo({         src: image,         success: function(imageInfo) {           let iWidth = imageInfo.width;           let iHeight = imageInfo.height;           let dWidth = (iWidth * 580) / iHeight;           ctx.drawImage(image, xp, 0, dWidth, 580);           ctx.stroke();           that.setData({             xp: that.data.xp + dWidth           });           resolve('success');         }       });     });     return pro;   },

第二种情况:其实在解决第一种情况的代码中,也用到了解决第二种情况的代码,使用Promise,有需要的话可以研究下上面的代码。

推荐教程:《微信小程序》

以上就是小程序中解决代码同步执行的问题的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 小程序
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:小程序画布canvas隐藏的问题解决

相关资讯