什么是Promise
Promise 是异步编程的一种解决方案,是对异步的执行结果的描述对象。
Promise最大的好处是在异步执行的流程中,把执行代码和处理结果的代码清晰地分离了。解决回调地狱问题。
Promise还可以做更多的事情,比如,有若干个异步任务,需要先做任务1,如果成功后再做任务2,任何任务失败则不再继续并执行错误处理函数。
promise有三种状态:pending(初始状态),fulfiled(成功时的状态),rejected(失败时的状态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
基本用法
new Promise((resolve, reject) => {
setTimeout(() => {
resolve("成功") //将Promise的状态修改为成功
// reject("失败") //将Promise的状态修改为失败
}, 1000);
}).then((res) => { //成功
console.log(res)
}, (err) => { //失败
console.log(err)
})
resolve就是把Promise的状态从初始状态修改为成功状态并将异步操作之后的结果作为参数传递出去
reject就是把Promise的状态从初始状态修改为失败状态并将异步操作报的错作为参数传递出去
使用Promise发起请求
function XML(url) {
let promise = new Promise((resolve, reject) => { //创建Promise实例
let Xmlhttml = new XMLHttpRequest() //创建一个xmlhttp实例
Xmlhttml.onreadystatechange = function () {
if (Xmlhttml.readyState === 4) { //判断数据读取是否结束
if (Xmlhttml.status === 200) { //判断状态码是否为200 200代表成功
// console.log(Xmlhttml.responseText)
resolve(Xmlhttml.response) //修改Promise的状态为成功 并传入数据
} else {
reject("失败了") //修改Promise的状态为失败
}
}
}
Xmlhttml.open('GET', url) //设置请求的方式和地址
Xmlhttml.send() //发送请求
})
return promise //返回实例
}
XML("http://localhost:3001/promise")
.then((res) => {
console.log(JSON.parse(res))
}, (err) => {
console.log(err)
})
成功时返回
失败时返回