Promise简单介绍
- 是ES6为了解决回调地狱的问题出现,其实也没有真正的解决
Promise
一共分为两个阶段①未决阶段unsettled
和已决阶段settled
- 异步事情是从未决到已决阶段,而未决阶段控制着通往已决阶段的能力,能够控制一个事情的走向
- 而ES6又将
Promise
分为三种状态pedding resolved rejected
①等待阶段②已处理阶段,可以按照正常逻辑进行下去③已拒绝阶段,无法按照正常逻辑走下去。后两种都属于已决阶段
- 把状态走向两个已决阶段时可能会传递一些数据①已处理阶段,带出的数据一般为真实有效数据②已拒绝阶段,带出的数据一般是错误信息
- !!不论进行到那个阶段都是无法逆转的
- 一般事情走到了已决阶段,不同的已决阶段会进行不同的后续处理方式
看一看如果利用promise解决ajax异步
- 封装一个函数
ajax
通过函数接受一些参数,return
出去new Promise((resolve, reject) => {}
- 通过异步
ajax
推向事情走向那个已决阶段来进行进一步的事情处理
resolve已决阶段已处理
调用该函数传入ajax
返回来的数据
reject已决阶段已拒绝
对错误信息进行处理
- 每次调用
resolve
函数都会走向then
方法第一个参数进行处理,处理完成后通过return fn("./1.json", names);
调用ajax
函数进行请求数据
- 每次在
then
方法第一个参数进行处理时return
之后在后面进行像jquery
那样打点链式调用进行处理
打点链式调案例 :
function fn(url, names) {
return new Promise((resolve, reject) => {
$.ajax({
type: "GET",
dataType: "json",
url: url,
success: function (res) {
if (res) {
if (names) {
resolve(res.data)
} else {
reject("没有找到")
}
} else {
reject("没有找到")
}
}
})
})
}