下面代码是图片上传业务,有旧图也可以加新图,新图要压缩,是异步
代码描述
遍历中穿插异步,可以使用对象缓存数据。键名表示处理序列中唯一的ID,键值是处理结果(此处应该是图片摘要数据JS对象),由异步回调函数填入。异步回调函数传参不仅需要传源数据,还要传入在对象中需要回调填回的ID。这样,就可以防止遗漏或者错乱数据了。
如果要确定所有异步操作都做完才进行下一步,就在异步里填完数据之后再检查一遍是否所有的都有数据。
最后,再将对象转换成新的数组,这就是所有图片的信息列表了。
13 回答12.7k 阅读
7 回答1.8k 阅读
3 回答1k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
2 回答1.8k 阅读
2 回答1.1k 阅读✓ 已解决
很奇怪,你用的压缩图片的插件为什么会是异步的?
不过既然lrz这个压缩图片插件返回的是一个Promise,那何不用async + await来搞。使用同步的方式写异步代码最爽了,伪代码如下:
对了,上面是串行压缩的。如果要并行压缩,可以用
Promise.all
这样做:当然,这个并行版本其实不用async + await也可以写得很简洁:
三个版本任君挑选。