Promise学习使用
Promise是承诺的意思,“承诺可以获取异步操作的消息”,是一种异步执行的方案,Promise有各种开源实现,在ES6中被统一规范,由浏览器直接支持。
Promise 对象有三种状态:pending、fullfilled 和 rejected,分别代表了 promise 对象处于等待、执行成功和执行失败状态
示例:
参数resolve,reject都是函数,执行成功调用 resolve('成功'),操作状态变为fullfilled , 否则执行 reject('失败:' + timeOut),操作状态变为rejected,转化过程只能有一次.
创建Promise对象执行test()函数。
function test(resolve, reject) {
var timeOut = Math.random() * 2;
setTimeout(function() {
if (timeOut < 1) {
resolve('成功');
} else {
reject('失败:' + timeOut);
}
}, timeOut * 1000);
}
new Promise(test).then(res => {
console.log(res);
}).catch(res => {
console.log(res);
})
Promise串行执行任务:
如果有多个异步任务,先做任务1,成功之后再做任务2,这样会写多层嵌套代码,Promise可以更简单的使用:
job1.then(job2).then(job3).catch(handleError);
job1、then(job2)、then(job3)是一个Promise对象,job2、job3是函数方法
function multiply(input) {
return new Promise(function(resolve, reject) {
console.log('相加:' + input + '+' + input)
setTimeout(resolve, 500, input * input); //将input*input参数传给执行函数resolve
})
}
function add(input) {
return new Promise(function(resolve, reject) {
console.log('相乘:' + input + '*' + input)
setTimeout(resolve, 500, input + input);
})
}
var p = new Promise(function(resolve, reject) {
console.log('执行Promise')
resolve(5);
})
p.then(multiply)
.then(add)
.then(multiply)
.then(add)
.then(res => {
console.log('最终结果:' + res)
})

then方法相当于success方法,catch方法相当于fail方法
当两个任务不存在依赖关系的时候,可以并行请求,用Promise.all()实现
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 600, 'P2');
});
// 同时执行p1和p2,并在它们都完成后执行then:
Promise.all([p1, p2]).then(function (results) {
console.log(results); // 获得一个Array: ['P1', 'P2']
});
处理多个任务的时候,只需要获得先返回的结果即可,用Promise.race()实现
var p1 = new Promise(function (resolve, reject) {
setTimeout(resolve, 500, 'P1');
});
var p2 = new Promise(function (resolve, reject) {
setTimeout(resolve, 600, 'P2');
});
Promise.race([p1, p2]).then(function (result) {
console.log(result); // 'P1'
});
在一些任务没有回调函数或者不好控制完成时间的时候,我们可以用Promise来处理。
Promise学习使用的更多相关文章
- Javascript - Promise学习笔记
最近工作轻松了点,想起了以前总是看到的一个单词promise,于是耐心下来学习了一下. 一:Promise是什么?为什么会有这个东西? 首先说明,Promise是为了解决javascript异步编 ...
- Promise 学习笔记 - 时间支配者
本文同步自我的个人博客:http://www.52cik.com/2015/11/08/promise.html JavaScript 的 promises 事实标准称为 Promises/A+.ES ...
- Javascript Promise 学习 (中)
时隔多日,对promise有了多一点点的了解. 最近用angularjs 做开发,所以研究了一下它的 $q 功能不算很强大,算是简化版的 Q.js 参考了一下源码,不过我的等级还差很多... 作为学习 ...
- Javascript Promise 学习(上)
Promise 就是处理异步的一个规范方法 a();b();alert("a");如果a() 里面有一个ajax 或者settimeout 那么alert("a" ...
- JavaScript之Promise学习笔记
一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...
- Promise学习探究
学习熟知吧,原理还是继续吧 例子1: var isGeted; function getRet(){ return new Promise(function(resolve, reject) { // ...
- Promise 学习心得
当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Prom ...
- js的Promise学习笔记(1)
1: 何为Promise Promise是抽象异步处理对象以及对其对象进行各种操作的组件,是基于并列/并行处理设计的一种编程语言. 说到基于JavaScript的异步处理,大多数都会想到利用回调函数. ...
- Promise学习
转自:http://www.cnblogs.com/lvdabao/p/es6-promise-1.html 去年6月份, ES2015正式发布(也就是ES6,ES6是它的乳名),其中Promise被 ...
- Promise 学习笔记
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise是一个对象,从它可以获取异步操作的消息.Promise提供统一的API, ...
随机推荐
- RabbitMQ跟Redis做消息队列的区别
区别 https://www.zhihu.com/question/20795043 https://blog.csdn.net/dd18709200301/article/details/79077 ...
- 一个可以配置阴影方向和颜色的类 CardView 控件 SCardView
一.控件简述 今天给大家推荐一个控件 SCardView ,看名字就很容易才出来它其实就是一个 CardView .把它拿出来,是因为它解决了一些 CardView 无法实现的需求以及简化了 Card ...
- go_micro相关书签
https://micro.mu/docs/cn/index.html gomicro文档 https://github.com/micro/go-micro gomicro代码 windows安装 ...
- IPFS 使用入门
在上一篇文章介绍了IPFS要做什么, 本篇文章介绍下IPFS怎么用, 按照本站的风格,我不会仅仅把一个个命令列出来,同时会说明命令在后面为我们做了什么. IPFS 安装 要使用IPFS, 第一步肯定是 ...
- spring RedisTemplate的使用(一)--xml配置或JavaConfig配置
1.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="h ...
- 因为没有安装xcode,得不到xcode证书报错
新接的一个项目.在从gitlab上clone代码的时候报错: Agreeing to the Xcode/iOS license requires admin privileges, please r ...
- Jenkins的安装配置和使用
Jenkins的安装配置和使用 1 Jenkins介绍 w3cschool中这样介绍:Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个 ...
- (JavaScript)实现上传图片实时预览和(文件)大小判断
唉,为什么我一个做大数据和后端的要为前端耗尽心力啊??!! 昨天在做一个网页时遇到了一个问题,有一处需要插入图片,我原本的想法是获取到上传文件的URL,然后动态插入img标签,设置src为图片的URL ...
- (整理4)RPC服务和HTTP服务简单说明
很长时间以来都没有怎么好好搞清楚RPC(即Remote Procedure Call,远程过程调用)和HTTP调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单 ...
- os.path官方文档(附翻译)
This module implements some useful functions on pathnames. To read or write files see open(), and fo ...