最近在做小程序的时候,做了一个对服务区满意度评价的功能,需要上传一张或多张图片作为评价依据。但是介于微信选择图片后无需上传即可看到预览图,所以我不打算在用户一选择图片后就及时上传,而是在提交评论时再统一上传选好的图片,这样做的原因,是考虑到用户选好图片后存在删除图片的情况,如果一选择就上传,后面提交时又删除了该图片,就浪费了流量,毕竟现在一张手机照的图片,动不动就几兆,看文章都可以看好多好多篇了,能节约的就节约。

下面说一下重点,就是在提交评论时,存在多张图片的可能,但我们必须要保证所有图片都上传成功了才发送评论的请求。问题在于,小程序的wx.uploadFile每次只能上传一个文件,要上传多个,只能使用for循环,但如果用for循环,如何知道所有的上传都成功了,是个很棘手的问题。好在小程序里面可以使用promise,所以自然而然的就想到了promise.all方法。但直接把wx.uploadFile放到promise.all里面,是行不通的,因为他不具有promise.all所必须的then属性,所以我们做的事情,大致分以下几步:

 

一、是先封装wx.uploadFile。实现如下:

 

二、在需要的页面引入

 

三、选择图片时,先不要上传,把选好的图片用变量存起来

 

四、最后提交评价时先上传所有图片,再提交

 

好了,整个功能到此全部完成,特别需要注意的是,wx.uploadFile返回的数据需要格式化。还有一点可以优化的地方可以留给大家思考如何做,如果因为其他原因提交失败,再次提交时,文件其实已经上传过了,如何避免再次上传?