//创建
const promise = new Promise(function(resolve, reject){});
//回调
promise.then(resolved, rejected);resolve和reject是Javascript引擎定义好的函数,resolve用于将Promise对象的状态改为已成功,reject用于将Promise对象的状态改为已失败,需手工调用,它们都可以传出一个参数给回调函数。
resolved和rejected是回调函数,resolved在状态成功时被调用,rejected在状态失败时被调用,两个函数是可选的,不一定要提供,两个函数需自行编写,由系统调用。举个例子:
const todo = function(year){
return new Promise(function(resolve, reject){
if(year>1982){
resolve("ok");
}else{
reject("error");
}
});
};
todo(1984).then(
function(msg){console.log('resolved:'+msg)},
function(msg){console.log('rejected:'+msg)}
);
//resolved:okthen方法返回的是一个新的Promise实例(不是原来那个Promise实例),因此可以采用链式写法(上一个回调函数返回的结果继续传给下一个回调函数):
(new Promise((resolve, reject)=>{resolve(1)}))
.then((msg)=>{console.log(msg);return ++msg;})
.then((msg)=>{console.log(msg);return ++msg;})
.then((msg)=>{console.log(msg);return ++msg;})Promise错误捕捉
上文说过,then方法的第二个参数可以用于捕捉错误:
(new Promise((resolve, reject)=>{throw 'error'})).then(
(msg)=>{console.log('resolved:'+msg)},
(msg)=>{console.log('rejected:'+msg)}
);
//rejected:error但是,万一then方法里又发生了错误怎么处理呢?还有then链式写法时,每个then方法里重复一样的错误捕捉冗余又不美观,因此建议在最后用catch方法进行错误捕捉:
(new Promise((resolve, reject)=>{throw 'error'}))
.then()
.then()
.then()
.then()
.then()
.catch((msg)=>{console.log('rejected:'+msg)});
//rejected:error(new Promise((resolve, reject)=>{resolve(1)}))
.then()
.then()
.then(()=>{throw 'error'})
.then()
.then()
.catch((msg)=>{console.log('rejected:'+msg)});
//rejected:error
评论(0)
暂无评论。