利用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 相关文章推荐
防止动态加载JavaScript引起的内存泄漏问题
Oct 08 Javascript
jquery统计输入文字的个数并对其进行判断
Jan 07 Javascript
基于jQuery实现的QQ表情插件
Aug 25 Javascript
JS中script标签defer和async属性的区别详解
Aug 12 Javascript
微信小程序 wxapp内容组件 text详细介绍
Oct 31 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
vue修改对象的属性值后页面不重新渲染的实例
Aug 09 Javascript
微信小程序canvas拖拽、截图组件功能
Sep 04 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
Jul 22 jQuery
详解Webpack4多页应用打包方案
Jul 16 Javascript
微信小程序实现分页加载效果
Nov 19 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实现对站点内容外部链接的过滤方法
2014/09/10 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
php制作简单模版引擎
2016/04/07 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
2016/05/10 Javascript
vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理
2017/03/06 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
VUE重点问题总结
2018/03/19 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
利用nohup来开启python文件的方法
2019/01/14 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python生态圈图像格式转换问题(推荐)
2019/12/02 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
Jupyter加载文件的实现方法
2020/04/14 Python
Django通过json格式收集主机信息
2020/05/29 Python
ORACLE第二个十问
2013/12/14 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
实体的生命周期
2013/08/31 面试题
黄河的主人教学反思
2014/02/07 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
企业文化理念标语
2014/06/10 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
网吧管理制度范本
2015/08/05 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python