Promise来控制JavaScript的异步执行
一般来说,js、html都是按照从上至下这种方式来进行执行的。这就造成了,基本上所有的执行过程都是在一个线程中进行。
我们都知道,ajax的使用大大的提高了前后台的沟通效率,那么有没有什么方式,让js的一些计算或者function来异步或者并行进行呢?
Promise可以帮我们实现
Promise方法概述
首先实现一个Promise方法
常用的方法有:all、reject、resolve、then、catch
reject、resolve、then、catch
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('干活ing...');
resolve('我干完了!');
}, 1000);
});
var p1 = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('干活ing...');
reject('出问题了!');
}, 1000);
});
p.then(function(data){
console.log(data);
//log: 我干完了!
});
p1.catch(function(data){
console.log(data);
//log: 出问题了!
});

上面的代码非常简单,Promise构造参数传入一个function,这个function必须有两个参数resolve, reject ,这就是他的用法。
resolve:执行成功 触发 then
reject :执行失败 触发 catch
all
var p = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('我是0号');
resolve('0号干完了!');
}, 1000);
});
var p1 = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('我是1号');
resolve('1号干完了!');
}, 900);
});
var p2 = new Promise(function(resolve, reject){
//做一些异步操作
setTimeout(function(){
console.log('我是2号');
reject('2号出错了!');
}, 950);
});
Promise.all([p,p1,p2]).then(function(ret){
console.log(ret);
}).catch(function(ret){
console.log(ret);
});
先观察上述的代码,感觉最后的all执行后的then和catch有点奇怪是吧,这就是强大之处,链式调用
然后咱们执行后,发现只有

并没有触发then,说明只要并发执行有任意的失败都会进入到catch中
ok,我们删掉catch的代码,再来执行

我们可以看到都已经执行成功。
但是咱们看代码,明明1号先执行完毕,为什么最后得到的结果还是按照先后顺序来的呢。
这里就需要注意 all在执行时的一个特性。会在执行最慢的一个方法执行完毕后才进行反馈
总结
1.注意链式用法,方便快捷高效
2.注意响应机制,合理利用,应对不同的业务场景
Promise来控制JavaScript的异步执行的更多相关文章
- 【javascript】Promise/A+ 规范简单实现 异步流程控制思想
——基于es6:Promise/A+ 规范简单实现 异步流程控制思想 前言: nodejs强大的异步处理能力使得它在服务器端大放异彩,基于它的应用不断的增加,但是异步随之带来的嵌套.难以理解的代码让 ...
- 漫话JavaScript与异步·第二话——Promise:一诺千金
一.难以掌控的回调 我在第一话中介绍了异步的概念.事件循环.以及JS编程中可能的3种异步情况(用户交互.I/O.定时器).在编写异步操作代码时,最直接.也是每个JSer最先接触的写法一定是回调函数(c ...
- 【javascript】异步编年史,从“纯回调”到Promise
异步和分块——程序的分块执行 一开始学习javascript的时候, 我对异步的概念一脸懵逼, 因为当时百度了很多文章,但很多各种文章不负责任的把笼统的描述混杂在一起,让我对这个 JS中的重要概念 ...
- 对Javascript异步执行的理解
简单的查看了下Javascript异步编程的代码.按照网上的说法,Javascript异步编程的核心就在于setTimeout.这个系统函数让我们将函数的执行放在了一个指定的新“线程”中.于是本来的顺 ...
- Promise then中回调为什么是异步执行?Promise执行机制问题
今天发现一个问题,看下方代码 let p = new Promise(function(resolve, reject) { resolve() console.log('); }); p.then( ...
- JavaScript的异步编程之Promise
Promise 一种更优的异步编程统一 方法,如果直接使用传统的回调函数去完成复杂操作就会形成回调深渊 // 回调深渊 $.get('/url1'() => { $.get('/url2'() ...
- 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?
本篇主要内容:异步.定时器引发的思考 预计阅读时间:8分钟 了解 我们都知道在js中定时器有两种 setInterval() . setTimeout() setInterval() :按 ...
- js的异步执行
a { color: green } a:hover { cursor: pointer } 1.Javascript语言的执行环境是"单线程"(single thread): 优 ...
- 漫话JavaScript与异步·第一话——异步:何处惹尘埃
自JavaScript诞生之日起,频繁与异步打交道便是这门语言的使命,并为此衍生出了许多设计和理念.因此,深入理解异步的概念对于前端工程师来说极为重要. 什么是异步? 程序是分"块" ...
随机推荐
- BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对
BZOJ_2058_[Usaco2010 Nov]Cow Photographs_逆序对 题意: 奶牛的图片 Farmer John希望给他的N(1<=N<=100,000)只奶牛拍照片, ...
- springboot2.x里面访问静态资源的坑
在spring boot的自定义配置类继承 WebMvcConfigurationSupport 后,发现自动配置的静态资源路径( classpath:/META/resources/,classpa ...
- Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
说说这个网站 汽车之家,反爬神一般的存在,字体反爬的鼻祖网站,这个网站的开发团队,一定擅长前端吧,2019年4月19日开始写这篇博客,不保证这个代码可以存活到月底,希望后来爬虫coder,继续和汽车之 ...
- 部署Chart应用并使用.net core读取Kubernetes中的configMap
上一篇文章讲了 k8s使用helm打包chart并上传到腾讯云TencentHub,今天就讲一下使用Helm部署应用并使用configMap代替asp.net core 中的appsettings.j ...
- IE不兼容ES6箭头函数的解决方法(在浏览器中使用)
polyfill.js下载方法: npm install babel-polyfill --save 页面中引用"polyfill.js" 和 "browser.min. ...
- 【转载】Docker+Kubernetes 干货文章精选
主要涉及到以下关键字: K8S.Docker.微服务.安装.教程.网络.日志.存储.安全.工具.CI/CD.分布式.实践.架构等: 以下盘点2018年一些精选优质文章! 漫画形式: 漫画:小黄人学 S ...
- TFS线上生成环境发布历程
继前文 TFS在项目中Devops落地进程(上) TFS在项目中DevOps落地进程(下) 自从之前将开发环境使用TFS进行了自动化之后,就享受在此成果中,其他后续进度就停顿了好一段时间. 毕竟在我们 ...
- 一文带你认识Spring事务
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...
- 使用LXD搭建Web网站
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由独木桥先生 发表于云+社区专栏 介绍 Linux的容器是Linux的一组进程,通过使用Linux内核功能与系统隔离.它是一个类似于虚拟 ...
- Odoo免费开源ERP销售收款的财务对账解决方案
概述 前面文章介绍了佛山王朝家具的案例背景.佛山王朝家具公司在全国有30多家门店,三个生产工厂.王朝家具有六大痛点问题: 一.订单迫切需要实现电子化管理及在线签名 二.总部分单工作量大,供应链效率低 ...