利用ES6的Promise.all实现至少请求多长时间的实例


Posted in Javascript onAugust 28, 2017

1、背景

我们都知道ajax请求可以加个timeout,就是最多请求多少时间,如果超过这个时间直接就报错。 这个是最多请求多长时间,我现在要做的是,最少要请求多长时间,然后才能执行后续的逻辑。

比如,一个ajax请求 x 毫秒就执行完毕了,但我要让他至少执行1秒钟,那我们会这么想: ajax完成后 , 1. 如果x<1s, 那我们先setTimeout => 1s - x ,然后执行后续操作。 2 如果x>=1s, 那我们直接执行后续操作。 想想这可繁琐了,我们还要在前面记录一下开始时间,后面记录一下结束时间,然后才能得到x。。。。

或者变量flag,ajax里面完成设置flag,setTimeout里面完成也设置flag等等等方法,都很繁琐、

2、Solution

现在ES6有个Promise.all,非常适合解决此类问题。直接这样 Promise.all([ajaxPromise(), waitPromise(1s)]).then(()=> 至少执行了1s) 。。。

如果说是 多个ajax(promise)按顺序执行,但总共加起来的时间至少是1s呢? 那就用一个Promise把多个ajax包起来。然后 Promise.all([ajaxPromiseAll(), waitPromise(1s)]).then(()=> 至少执行了1s) 。。。

3、 讲得很抽象,实例为证

这个实例是这样的,微信里面有拆红包,当我们点击 ? 的时候,那个字至少会完整的 翻一翻。那个完整翻一翻的时间我们假定需要1秒钟。 如果我们直接点击开的时候,立即请求ajax,等ajax完成立即拆开红包,这里的时间 有可能不足1s,那 就不能做到完整翻一翻。 如果请求大于1s,那就让它一直翻转吧,直到完成请求。所以我们为了解决这个问题,就需要用到上面的技术。

参考代码如下(Chrome最新版下测试):

/ ajax模拟A
const funcA = async () =>
 new Promise(resovel => {
  setTimeout(() => {
   console.log("done A");
   resovel("func A");
  }, 400);
 });

因为async和await使用起来比Promise爽,所以我采用了这两个语法糖来写,用setTimeout来模拟ajax请求, ajax模拟A和 ajax模拟B有顺序关系的,比如先检测这个人是否还有机会打开红包,然后再请求打开红包获得随机红包金额 。

以上这篇利用ES6的Promise.all实现至少请求多长时间的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery iframe操作详细解析
Nov 20 Javascript
javascript根据像素点取位置示例
Jan 27 Javascript
jQuery中scrollLeft()方法用法实例
Jan 16 Javascript
原生js实现图片层叠轮播切换效果
Feb 02 Javascript
高效利用Angular中内置服务$http、$location等
Mar 22 Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
Mar 13 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
Jun 08 Javascript
js阻止默认右键的下拉菜单方法
Jan 02 Javascript
小程序实现发表评论功能
Jul 06 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
JavaScript闭包原理与用法学习笔记
May 29 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 #Javascript
JavaScript学习笔记之惰性函数示例详解
Aug 27 #Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 #Javascript
vue下跨域设置的相关介绍
Aug 26 #Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
Aug 26 #Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
Jun 19 #Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 #Javascript
You might like
解析php中的escape函数
2013/06/29 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
如何在Linux上安装Node.js
2016/04/01 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
2017/10/26 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
浅谈webpack4.x 入门(一篇足矣)
2018/09/05 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
浅谈Javascript中的对象和继承
2019/04/19 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
[01:21]DOTA2 新英雄 森海飞霞
2020/12/18 DOTA
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python处理html转义字符的方法详解
2016/07/01 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
2018/07/27 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
2014年关于两会精神的心得体会
2014/03/17 职场文书
工会主席事迹材料
2014/06/03 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
公司离职证明范本
2014/10/17 职场文书
房屋质量投诉书
2015/07/02 职场文书
幼儿园元旦主持词
2015/07/06 职场文书