Promise的生命周期
每个promise都会经历一个短暂的生命周期:先是处于进行中(pending)的状态,此时操作尚未完成,所以它也是未处理(unsettled)的;一旦异步操作执行结束,Promise则变为已处理(settled)的状态。已处理的状态又分为以下两种:
- Fulfilled Promise异步操作成功完成
- Rejected 由于程序错误或其他一些原因,Promise异步操作未能成功完成。
then()方法
所有Promise都有then()方法,它接受两个参数:第一个是当Promise的状态变为fulfilled时要调用的函数,与异步操作相关的附加数据都会传递给这个完成函数;第二个是当Promise的状态变为rejected时要调用的函数,其与完成时调用的函数类似,所有与失败状态相关的附加数据都会传递给这个拒绝函数。
then()的两个参数都是可选的,可以按照任意组合的方式来监听Promise,执行完成或被拒绝都会被响应。来看下面实例:
let promise = readFile("example.txt");
promise.then(function(contents){
//完成
console.log(contents);
},function(err){
//拒绝
console.error(err.message);
});
promise.then(function(contents){
//完成
console.log(contents);
});
promise.then(null,function(err){
//拒绝
console.error(err.message);
});
上面这3次then()调用操作的是同一个Promise。第一个同时监听了执行完成和执行被拒;第二个只监听了执行完成,错误时不报告;第三个只监听了执行被拒,成功时不报告。
Promise还有一个catch()方法,相当于只传入拒绝处理程序的then()方法。如下,catch()方法和then()方法实现的功能是等价的:
promise.catch(function(err){
//拒绝
console.error(err.message);
});
//与以下调用相同
promise.then(null,function(err){
//拒绝
console.error(err.message);
});
还没有评论,来说两句吧...