咱们都知道ajax请求能够加个timeout,就是最多请求多少时间,若是超过这个时间直接就报错。 这个是最多请求多长时间,我如今要作的是,最少要请求多长时间,而后才能执行后续的逻辑。ajax
好比,一个ajax请求 x 毫秒就执行完毕了,但我要让他至少执行1秒钟,那咱们会这么想: ajax完成后 , 1. 若是x<1s, 那咱们先setTimeout => 1s - x ,而后执行后续操做。 2 若是x>=1s, 那咱们直接执行后续操做。 想一想这可繁琐了,咱们还要在前面记录一下开始时间,后面记录一下结束时间,而后才能获得x。。。。promise
或者变量flag,ajax里面完成设置flag,setTimeout里面完成也设置flag等等等方法,都很繁琐、微信
如今ES6有个Promise.all,很是适合解决此类问题。直接这样 Promise.all([ajaxPromise(), waitPromise(1s)]).then(()=> 至少执行了1s) 。。。async
若是说是 多个ajax(promise)按顺序执行,但总共加起来的时间至少是1s呢? 那就用一个Promise把多个ajax包起来。而后 Promise.all([ajaxPromiseAll(), waitPromise(1s)]).then(()=> 至少执行了1s) 。。。测试
这个实例是这样的,微信里面有拆红包,当咱们点击 開 的时候,那个字至少会完整的 翻一翻。那个完整翻一翻的时间咱们假定须要1秒钟。 若是咱们直接点击开的时候,当即请求ajax,等ajax完成当即拆开红包,这里的时间 有可能不足1s,那 就不能作到完整翻一翻。 若是请求大于1s,那就让它一直翻转吧,直到完成请求。因此咱们为了解决这个问题,就须要用到上面的技术。code
参考代码以下(Chrome最新版下测试):get
See the Pen Promise.all的应用实例 by wenjie (@wenjie) on CodePen.hash
由于async和await使用起来比Promise爽,因此我采用了这两个语法糖来写,用setTimeout来模拟ajax请求, ajax模拟A和 ajax模拟B有顺序关系的,好比先检测这我的是否还有机会打开红包,而后再请求打开红包得到随机红包金额 。it