好久没有发文了,为了不让大家忘了我,今天给大家分享一下promise对象的小案例。promise是异步微任务,解决了异步多层嵌套回调的问题,在前端非常常用,面试也经常会问到它,现在就带着大家快速理解promise的使用。
下面这段代码创建了一个函数表达式a
函数内部返回了一个 Promise ,在Promise的构造器里传入一个函数,这个函数有两个参数,分别是两个函数 `resolve`和`reject`,resolve可以理解为函数体执行过程中满足你设立的条件时所触发的函数,reject则是不满足时触发。
就比如下面这个例子,给函数a传入一个值如果大于0触发resolve函数里的,否则就触发reject函数里的。
var a = function (num) {
return new Promise((resolve, reject) => {
if (num > 0) {
resolve("成功大于0");
}
else {
reject("失败小于0");
}
});
};
我们验证一下这个函数。可以使用`then`方法分别指定成功或失败的回调函数。
a(1).then(function (res) {
console.log(res);
}).catch(res => {
console.log(res)
})
传入一个1进去,控制台的输出信息就是我们写在resolve里的内容。
如果传入一个小于0的数就会触发catch函数,捕获reject的异常,也可以不写,不写的后果就是会报错,程序将不会继续执行下去。
resolve 方法的参数是then中回调函数的参数,reject 方法中的参数是catch中的参数。
then 方法和 catch方法 只要不报错,返回的都是一个fullfilled状态的promise 。
promise共有三种状态 - pending(执行中) - Resolved(成功,又称Fulfilled) - rejected(拒绝) 其中pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)。一旦状态改变,就不会再变,任何时候都可以得到这个结果。
Promise对象的状态改变,只有两种可能(状态凝固了,就不会再变了,会一直保持这个结果): - 从Pending变为Resolved - 从Pending变为Rejected。