利用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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
javascript判断是否按回车键并解决浏览器之间的差异
May 13 Javascript
html文本框提示效果的示例代码
Jun 28 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
Jun 06 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
jquery获取链接地址和跳转详解(推荐)
Aug 15 jQuery
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
BootstrapValidator实现表单验证功能
Nov 08 Javascript
uni-app 组件里面获取元素宽高的实现
Dec 27 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 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 strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
document.all的一个比较完整的总结及案例
2013/01/31 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
详解JS模块导入导出
2017/12/20 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
python求crc32值的方法
2014/10/05 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python 换位密码算法的实例详解
2017/07/19 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
python修改txt文件中的某一项方法
2018/12/29 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
简单了解python列表和元组的区别
2020/05/14 Python
Python如何优雅删除字符列表空字符及None元素
2020/06/25 Python
Python2及Python3如何实现兼容切换
2020/09/01 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
德国旅游网站:weg.de
2018/06/03 全球购物
软件测试英文面试题
2012/10/14 面试题
毕业生的自我评价分享
2013/12/18 职场文书
教师年度考核自我鉴定
2014/01/19 职场文书
家长会欢迎词
2015/01/23 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书