Promise就是为了解决callback的问题而产生的。
Promise 实现了链式调用,也就是说每次 then 后返回的都是一个全新 Promise,如果我们在 then 中 return ,return 的结果会被 Promise.resolve() 包装
优点:解决了回调地狱的问题
ajax('XXX1')
.then(res => {
// 操作逻辑
return ajax('XXX2')
}).then(res => {
// 操作逻辑
return ajax('XXX3')
}).then(res => {
// 操作逻辑
})
缺点:无法取消 Promise ,错误需要通过回调函数来捕获
补充:axios 怎么做到取消的,axios因为有cancelToken机制,就可以做到取消axios请求
1、promise实现原理
简单的来说,promise是一个简单的容器,里面存放着未来可能结束的事件,一般为异步操作的结果。语法上说,promise是一个对象,他可以获取异步操作的信息。提统一的api,各种操作结果都可以以同样的方法操作。
它的特点是:
(1)对象的状态不受外界影响。promise代表一个异步操作,有三种状态:pending(进行中),resolved(已成功),rejected(已失败)。只有异步操作的结果可以决定是哪一种状态,任何其他操作都无法改变这种状态。
(2)一旦状态改变,就不会再改变了,任何时候都是可以得到这个结果的。状态的改变只有两种可能:从pending变为resolved和从pending变为rejected。只要这两种状态发生,状态就 不会改变了。
它的使用:
promise是一个对象,首先需要实例化一个对象,promise构造函数中传递一个函数,该函数用于处理异步操作的结果。函数中接收两个回调函数resolve和reject作为参数,分别用处理成功和失败两种情况。promise实例生成后,可以用then方法分别指定resolved和reje