学习Promise

学习Promise

Promise的含义

Promise是一个对象,从它可以获取异步操作的消息。简单来说,Promise像一个容器,其中保存着异步操作的结果。

特点

  1. Promise对象代表一个异步操作,有三种状态:
    pending(进行中)
    fulfilled(已成功)
    rejected(已失败)
    对象的状态是由异步操作的结果来决定的,与外界无关。

  2. Promise对象的状态改变只有两种可能:从pending变为fulfilled和从pending变为rejected。且不会再变了。resolved一般用来指代fulfillied

基本用法

Promise是一个构造函数,用来生成Promise实例。

const promise = new Promise(function(resolve,reject){
	if(/* 异步操作成功 */){
		resolve(value);
	}else{
		reject(error);
	}
})

Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。

promise.then(function(value){
	// success	
},function(error){
	//failure
});

注:第二个值可选。

Promise新建后就会立即执行。

let promise = new Promise(function(resolve,reject){
	console.log('Promise');
	resolve();
});

pomise.then(function(){
	console.log('resolved');
})
console,log('Hi!');
//Promise
//Hi
//resolved

执行顺序:Promise新建即执行=>同步任务=>then方法指定的回调函数

resolve函数和reject函数都可以带有参数,reject函数的参数一般是Error对象的实例,表示抛出的错误;resolve函数的参数除了正常值外,还有可能是另一个Promise实例。

注:一般来说,Promise的使命就是调用resolvereject。故一般其它操作可以放在then里去执行。

then、catch和finally

then方法为Promise实例添加状态改变时的回调函数,第一个参数是resolved状态的回调函数,第二个参数(可选)是rejected状态的回调函数。
由于then方法返回的是一个新的Promsie实例,即可以采用链式写法,then方法后面再调用另一个then方法。

catch方法是用于指定错误发生时的回调函数。Promise对象的错误具有“冒泡”性质,前面任何一个Promise对象抛出错误,最后都会被catch捕获。

注:Promise内部的错误不会影响外部代码的运行。

finally方法用于指定不管Promise对象最后的状态如何,都会执行的操作。其回调函数不接受任何参数。

Promise.all()

const p = Promise.all([p1,p2,p3]);

Promise.all()方法接受一个数组作为参数,p1p2p3都是Promise的实例(如果不是,也要转为Promise实例)。其中p1p2p3只有全部是fulfilledp的状态才会是fulfilled,否则p的状态就是rejected

文章来源:
阮一峰ES6入门.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值