利用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初学:find()方法及children方法的区别分析
Jan 31 Javascript
js获取ajax返回值代码
Apr 30 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
微信小程序录音与播放录音功能
Dec 25 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
Nov 05 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 Javascript
vue路由传参页面刷新参数丢失问题解决方案
Oct 08 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 Javascript
js实现抽奖功能
Nov 24 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
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
php将html转为图片的实现方法
2017/05/19 PHP
Javascript模板技术
2007/04/27 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
利用jQuery的deferred对象实现异步按顺序加载JS文件
2013/03/17 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
js实现抽奖效果
2017/03/27 Javascript
浅谈ECMAScript6新特性之let、const
2017/08/02 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
vue.extend实现alert模态框弹窗组件
2018/04/28 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
vue 实现图片懒加载功能
2020/12/31 Vue.js
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
解决Mac下使用python的坑
2019/08/13 Python
python3 实现调用串口功能
2019/12/26 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
Java基础知识面试题
2014/03/25 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
七年级英语教学反思
2014/01/15 职场文书
安全生产管理责任书
2014/04/16 职场文书
设计大赛策划方案
2014/06/13 职场文书
春节超市活动方案
2014/08/14 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
社区结对共建协议书
2016/03/23 职场文书