简介
在ES6里面为了解决回调地狱的问题,引入了一个新的概念,就是Promise,而在之后的ES8,ES9里面,又都根据原Promise的基础上,对该语法进行了完善。
ES6里的Promise
Promiss函数,其实本质上来说,它是一个构造函数,它本身自带有的属性就是 all,race,resolve,reject。
同时Promise构造函数存在三个执行的状态,分别是padding(进行中),fulfilled(已经成功),rejected(已经失败)。
因为它是一个构造函数,所以在它的原型上,也会有对应的属性,分别是then(成功的时候执行),catch(失败的时候执行),finally(不管成功失败都执行)。这三个在原型上的属性其实也就是这个Promise的回调函数。
说完Promise的基础知识,接下来说一下Promise的基础语法。
这里我举个例子,就是来封装一个简单的Ajax来说明
function get (URL) {
return new Promise((resolve,reject)=>{
let req = new XMLHttpRequest
req.open('GET',URL,true)
req.onload = function(){
if(req.status===200){
resolve(req.responseText)
}else{
reject(new Error(req.statusText))
}
}
req.onerror(new Error(req.statusText))
req.send()
})
}
这样就封装完一个简单的Promise了,那么使用它的方法是这样
get(请求的地址)
.then(response=>{
})
.catch(error=>{
})
这里有一个要说明的地方,就是Promise的状态是单向的,也就是一旦确定,那么就不可逆转,也就是当你的Promise的状态由 padding 转变到 fulfilled或者变成 rejected 状态的时候,就不会再重新转变为padding 状态了。
Promise的一些简写
在开发过程中,Promise也提供了一些简写的方法
let get = function(){
return Promise.resolve(44)
}
//上面相当于是下面式子的简写
let get = function(){
return new Promise(resolve=>{
resolve(44)
})
}
get().then(response=>