promise学习总结
什么是Promise
Promise是异步编程的一种解决方案,它有三种状态,分别是pending-进行中、resolved-已完成、rejected-已失败
当Promise的状态又pending转变为resolved或rejected时,会执行相应的方法,并且状态一旦改变,就无法再次改变状态,这也是它名字promise-承诺的由来
直接上案例了,在案例中理解:
最简单的promise
new Promise(resolve =>{
setTimeout(()=>{
resolve('hello')
},2000);
}).then(value=>{
console.log(value + 'world');
})
console.log('start');
new Promise(resolve => {
setTimeout(() => {
resolve('hello');
}, 2000);
})
.then(value => {
console.log(value);
return new Promise(resolve => {
setTimeout(() => {
resolve('world');
}, 2000)
});
})
.then(value => {
console.log(value + ' world');
});
// 结果
// start
// hello (2s)
// worldworld (4s)
console.log('start');
let promise = new Promise(resolve=>{
setTimeout(()=>{
console.log('this promise fullfilled');
resolve('hello,world')
},2000);
});
setTimeout(()=>{
promise.then(value=>{
console.log(value);
})
},4000)
// 结果
// start
// this promise fullfilled (2s)
// hello,world (4s)
//在任何地方生成一个promise后,可以存为一个变量,不管该promise有完成,都会依次根据队列执行
console.log('start');
new Promise(resolve => {
setTimeout(() => {
resolve('hello')
}, 2000);
})
.then(value => {
console.log(value);
(function () {
return new Promise(resolve => {
setTimeout(() => {
console.log('第二个promise');
resolve('Merry')
}, 2000);
})
}());
return false;
})
.then(value => {
console.log(value + 'world');
})
// 结果
// start
// hello (2s)
// falseworld (2s)
// 第二个promise (4s)
//.then() 的函数里面不返回新的 Promise,会默认执行下一个环节,即使你直接返回了false,也会执行
// 备注
// 匿名函数,(function(){})();立即执行,主要利用函数内的变量作用域,避免产生全局变量,影响整体页面环境,增加代码的兼容性。
new Promise(resolve => {
console.log('start');
setTimeout(() => {
console.log('1');
resolve('1');
}, 1000)
})
.then(value => {
return new Promise(resolve => {
setTimeout(() => {
console.log('1-1');
resolve('1-1');
}, 1000)
})
.then(value => {
console.log('1-2');
return value;
})
.then(value => {
console.log('1-3');
return value;
})
})
.then(value => {
console.log('2');
})
/*
结果:
start
1
1-1
1-2
1-3
2
*/
console.log('go');
new Promise((resolve,reject)=>{
setTimeout(()=>{
reject('bye')
// throw new Error('bye');
},1000)
})
.then(value=>{
console.log(value+'world');
})
.catch(error=>{
console.log('error:',error);
})
// go
// error: bye
console.log('go');
new Promise(resolve=>{
setTimeout(() => {
resolve('');
}, 1000);
})
.then(()=>{
console.log('start')
throw new Error('test error');
})
.catch((err)=>{
console.log('I catch:'+ err);
// 下面一行代码的注释讲引发不同的走向
throw new Error('another error');
})
.then(()=>{
console.log('arrive here');
})
.then(()=>{
console.log('and here');
})
.catch((err)=>{
console.log('I catch:'+ err);
})
/*
结果一:
go
start
I catch:Error: test error
arrive here
and here
结果二:
go
start
I catch:Error: test error
I catch:Error: another error
*/
console.log('go');
Promise.all([1,2,3])
.then(all=>{
console.log('1:',all);
return Promise.all([function(){
console.log('ooxx');
},'xxoo',false])
})
.then(all =>{
console.log('2:',all);
let p1 = new Promise(resolve=>{
setTimeout(() => {
resolve('I`m P1');
}, 1000);
});
let p2 = new Promise(resolve=>{
setTimeout(() => {
resolve('I`m P2');
}, 3000);
});
return Promise.all([p1,p2]);
})
.then(all =>{
console.log('3:',all);
let p1 = new Promise(resolve=>{
setTimeout(() => {
resolve('I`m P1');
}, 1000);
});
let p2 = new Promise((resolve,reject)=>{
setTimeout(() => {
reject('I`m P2');
}, 1000);
});
let p3 = new Promise((resolve,reject)=>{
setTimeout(() => {
reject('I`m P3');
}, 1500);
});
return Promise.all([p1,p2,p3]);
})
.then(all=>{
console.log('all:',all);
})
.catch(err=>{
console.log('catch',err);
})
/*
结果:
go
1: [ 1, 2, 3 ]
2: [ [Function], 'xxoo', false ]
3: [ 'I`m P1', 'I`m P2' ]
catch I`m P2
*/
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, ...
随机推荐
- I2C驱动框架 (kernel-3.4.2)
先用韦老师的图: 注: 新版本内核的i2c驱动框架采用了 i2c_client -------> i2c_bus_type <-------- i2c_driver 框架 如 ...
- Ch02 控制结构和函数 - 练习
1. 一个数字如果为正数,则它的signum为1:如果是负数,则signum为-1:如果是0,则signum为0.编写一个函数来计算这个值. scala> def signum(x:Int):I ...
- generatorConfiguration详解
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration ...
- windows下cmd无法使用telnet命令解决方法 (原)
telnet不是内部或者外部命令,也不是可运行程序-----解决办法: (win7为例) 控制面板 --- > 程序(小图标下直接到[程序和功能]) --- >程序和功能 --- > ...
- 2017.11.10 重读C++ Primer
第二章 变量和变量类型 1. C++ 算数类型 bool 布尔 最小尺寸未定义 char 字符 8位 wchar_t ...
- 完成登录功能,用session记住用户名
登录功能完成: js:设置return html:设置 form input py: @app.route设置methods GET POST 读取表单数据 查询数据库 用户名密码对: 记住用户名 跳 ...
- 【Spark-core学习之八】 SparkShuffle & Spark内存管理
[Spark-core学习之八] SparkShuffle & Spark内存管理环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 ...
- P3371 【模板】单源最短路径(弱化版)(Dijkstra算法)
题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出发点的编号. 接下来M行每行包含三 ...
- GoldenGate for Java adapter介绍二(代码篇)
本示例主要介绍通过实现OGG的接口函数,实现自定义处理增量数据,将数据实时写入到mariadb (OGG官方不支持此数据库,所以只能采用自定义方式实现).以下是本次示例的4个类: Connection ...
- java 43 接口