项目中有个需求,类似视频网站下载视频,比如有5个case,每个case有数量不等的的video需要从服务端下载,并且video的下载顺序是串联的,只有当正在下载的case下载完才能下载另外一个case,否则下一个case处于wait状态。
如何解决此问题
- 使用Promise
利用promise的then方法,但是因为无法确定每个case的video的数量,导致不能确定后面应该接几个then,最开始想到一个笨方法,列一个表格把所有可能的video数量都列出来(因实际需求每个case不会超过10个video),然后去套用不同的方法,
function downVideoSeries(n) {
if(n === 1) {
return new Promise((resolve, reject) =>{
//ajax code for one video
}).then((resolve)=>{
...
}).catch((err)=>{
...
})
}else if(n ===2) {
return new Promise((resolve, reject) =>{
//ajax code for one video
}).then((resolve)=>{
new Promise((resolve, reject) =>{
//ajax code for another video
})
}).then((resolve)=>{
...
}).catch((err)=>{
...
})
}
...
}
后经重新查看Promise,可以发现能构造一个空的Promise来解决问题,动画一帧帧执行的代码
function chainAnimationsPromise(elem, animations) {
// 变量ret用来保存上一