利用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基础知识filter()和find()实例说明
Jul 06 Javascript
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
node.js实现逐行读取文件内容的代码
Jun 27 Javascript
基于socket.io和node.js搭建即时通信系统
Jul 30 Javascript
node.js中的dns.getServers方法使用说明
Dec 08 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
vuecli3.x中轻松4步带你使用tinymce的步骤
Jun 25 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
一个多文件上传的例子(原创)
2006/10/09 PHP
MySQL修改密码方法总结
2008/03/25 PHP
PHP删除数组中空值的方法介绍
2014/04/14 PHP
PHP经典面试题集锦
2015/03/19 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
JQuery扩展插件Validate—4设置错误提示的样式
2011/09/05 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
Angular实现响应式表单
2017/08/04 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
Javascript模块化机制实现原理详解
2020/04/02 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
Python简单过滤字母和数字的方法小结
2019/01/09 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Python3将jpg转为pdf文件的方法示例
2019/12/13 Python
在Python 的线程中运行协程的方法
2020/02/24 Python
Python同时迭代多个序列的方法
2020/07/28 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
销售高级职员求职信
2013/10/29 职场文书
运动会100米解说词
2014/01/23 职场文书
春节联欢会主持词
2014/03/24 职场文书
影视后期实训报告
2014/11/05 职场文书
百家讲坛观后感
2015/06/12 职场文书
2016三八妇女节校园广播稿
2015/12/17 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
Springboot中如何自动转JSON输出
2022/06/16 Java/Android
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers