Promise的基本概念
promise属于new出来的对象,它的存在代表了一个异步程序的成功或失败
该对象有三种状态:
- Pending(进行中)
- Resolved(已完成,又称 Fulfilled)
- Rejected(已失败)
只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。
我们可以使用promise检测ajax的请求状态,利用promise的成功状态函数,返回ajax请求到的数据。
举个简而易懂的例子:
> promise是承诺的意思,那我说如果RNG今天打赢了比赛,三天后我就去吃庆功宴,这样就产生了两种可能:
> 1.RNG赢了,我后天去吃庆功宴
> 2.RNG输了,我还是要乖乖的敲代码
承诺的正在进行时: 三天期间
承诺成功: 三天后,去吃庆功宴了
承诺失败: 三天后,没有去吃庆功宴
原生js模仿promise的过程:
function fn(success,error){
console.log("正在进行时....")
var t1,t2;
t1 = setTimeout(() => {
success();
clearTimeout(t2) //成功时清除失败的计时器
}, Math.random()*1000);
t2 = setTimeout(() => {
error()
clearTimeout(t1) //失败时清除成功的计时器
}, Math.random()*1000);
}
fn(function(){
document.body.style.background = "green";
},function(){
document.body.style.background = "pink";
});
ES6封装好的promise
封装好的promise是已经做好了我们要手动清除计时器的功能, 所以不需要再多此一举了
var p = new Promise(function(success,error){
setTimeout(() => {
success();
}, Math.random()*1000)
setTimeout(() => {
error();
}, Math.random()*1000)
});
p.then(function(res){
console.log("成功")
},function(res){
console.log("失败")
})
要更加深入了解promise,就去官方文档看看吧。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Using_promises