ES6-Promise

promise

promise就是一个对象,存储着异步函数返回的结果

promise有三种状态:

1.pending(进行中)

2.fulfilled(已完成)更多则用resolved

3.rejected(已失败)

这三种状态,什么时候展现,就看异步函数返回的结果.

promise对象是一个构造函数

例子:

new Promise((resolve,reject)=>{
	console.log('Promise','test');
  	//reject(); // test1
  	resolve(); //test2
}).then(() => {
	console.log('resolved','test')
}).catch(() => {
	console.log('hi','test')
})

////test1  output:
Promise test
hi test

///test2 
output:
Promise test
resolved test

reslove 代表成功之后执行的行数,调用reslove()则就执行then方法.

.then可以有多个方法,将依次执行.

调用reject(),则就执行失败后回调的方法.catch里面的方法

例子2:

在一个函数中返回一个promise对象,当调用该函数时,去判断是否执行哪个回调函数

function doSomething(index) {
	return new Promise((resolve,reject) => {
	    console.log('promise created!')
		if( index > 5){
			resolve();
		} else reject();
	})
	
}

doSomething(2).then((value) =>{
	console.log('我大于5哦~')
}).catch((value) => {
	console.log('我小于5哦~')
})


/// output
promise created!
我小于5哦~

Ps:如果在doSomething函数中不去返回promise对象,就在调用改函数时用then方法,是会报错!!!!

执行顺序: promise创建后就会执行,当所有的同步执行结束后才会执行then等回调函数.

一个promise对象的结果作为参数给另一个promise对象

const p1 = new Promise(function (resolve,reject) {
	reject();
})

const p2 = new Promise(function(resolve,reject) {
	resolve(p1);
})

p1.then(() => {
	console.log('p1 resolve')
}).catch(()=> {
	console.log('p1 reject')
})

p2.then(() =>{
	console.log('p2 resolve')
}).catch(() => {
	console.log('p2 reject')
})

/// output
p1 reject
p2 reject

即p1的结果会影响到p2

promise的finally()方法

promise
.then( result => {...})
.catch( error => {...})
.finally(() => {...})
finally方法就是无论promise对象的最后状态如何,都会执行的方法.
posted @ 2018-10-31 15:24  phoebemoon  阅读(128)  评论(0编辑  收藏  举报