利用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获取GridView选择的行内容
Apr 14 Javascript
技术男用来对妹子表白的百度首页
Jul 23 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
JavaScript使用replace函数替换字符串的方法
Apr 06 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
Nov 24 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
轻松实现js选项卡切换效果
Sep 24 Javascript
JavaScript 数组的深度复制解析
Nov 02 Javascript
js canvas实现放大镜查看图片功能
Jun 08 Javascript
原生js实现九宫格拖拽换位
Jan 26 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日期处理函数 整型日期格式
2011/01/12 PHP
PHP面向对象——访问修饰符介绍
2012/11/08 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
2020/02/10 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
Mootools 1.2教程 滑动效果(Slide)
2009/09/15 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
jquery 实现二级/三级/多级联动菜单的思路及代码
2013/04/08 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
vue中实现移动端的scroll滚动方法
2018/03/03 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
Django项目uwsgi+Nginx保姆级部署教程实现
2020/04/19 Python
python3中for循环踩过的坑记录
2020/12/14 Python
python 实现客户端与服务端的通信
2020/12/23 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
俄罗斯在线大型超市:ТутПросто
2021/01/08 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
简单租房协议书
2014/04/09 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
保安辞职申请书应该怎么写?
2019/07/15 职场文书
日本官方排名前10的动漫,名侦探柯南上榜,第一是一部创造历史的动漫
2022/03/18 日漫
python三子棋游戏
2022/05/04 Python
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技