在Javascript、TypeScript等脚本程序中,除了用最笨重的原生方式来实现异步操作(请点击 这里 查看它的具体实现方法)之外,是否还有其他方式呢?答案是肯定的,当然可以用Promise许诺对象来实现。
Promise,顾名思义,是许诺之意,用来处理异步操作的对象方法。它可以让我们写异步调用脚步代码时候,代码写得更加优雅、更加美观、更加简单。Promise许诺之后,它肯定会给一个答复,要么成功答复,要么失败答复。当然,可能会出现Promise代码没有任何答复情况,这时程序处于一致处于等待状态即未知,因此,书写Promise代码一定要让程序任何执行分支都有一个答复,不论是成功答复还是失败答复,如此一来程序是健壮可靠的。
Promise 是一个脚本对象,通常描述现在优先执行但一段时间后才能知道结果的行为场景实现,它的内部保存这个异步行为的结果。它有三种状态,分别是:
1. pending:待定
2. resolved:解决
3. rejected:拒绝
还有两种状态转换过程,如下:
1. pending 到 resolved
2. pending 到 rejected
先来创建一个最简单的空的Promise对象代码,如下:
new Promise((resolve, reject) => {
});
许诺Promise对象有两种结果状态,要么成功答复,要么失败答复,分别如下:
1. 成功答复
new Promise((resolve, reject) => {
resolve(1);
});
2.失败答复
new Promise((resolve, reject) => {
reject(0);
});
上面是有了明确的答复,但是没有依据答复结果而做相应的响应处理逻辑。那么,我们需继续添加上响应处理逻辑,如下:
1.成功答复
new Promise((resolve, reject) => {
resolve(1);
}).then((res)=>{
console.info("resolved: "+res);
},(err)=>{
console.error("rejected: "+err);
});
执行结果是resolved: 1
2.失败答复
new Promise((resolve, reject) => {
reject(0);
}).then((res)=>{
console.info("resolved: "+res);
},(err)=>{
console.error("rejected: "+err);
});
执行结果是rejected: 0
大家看看,这样写异步操作的脚本代码是不是很帅,代码非常简洁。当然,还可另外一种方式写出响应处理函数,如下:
1.成功答复
function onResolved(res){
console.info("resolved: "+res);
}
function onRejected(err){
console.info("rejected: "+err);
}
new Promise((resolve, reject) => {
resolve(1);
}).then(onResolved,onRejected);
执行结果是resolved: 1
2.失败答复
function onResolved(res){
console.info("resolved: "+res);
}
function onRejected(err){
console.info("rejected: "+err);
}
new Promise((resolve, reject) => {
reject(0);
}).then(onResolved,onRejected);
执行结果是rejected: 0
总而言之,不管哪种方式书写响应处理函数,用许诺Promise对象来实现脚本异步操作逻辑是非常方便的,推荐使用。
原文来自码嗨路书