Promise 与 generator函数
作者: DocWhite白先生
什么是Promise?如果还不知道什么是Promise推荐读 阮一峰老师的ES6入门 里面有关于 ES6新特性和Promise更全面和学术话的介绍。
一. 回调地狱
在说Promise之前,先聊聊一个前端开发最常见的烦恼:回调地狱,什么是回调回调地狱。
举个例子:
// 检测用户是否存在。
$.ajax({
url: 'http://api.domain.com/check-user',
method: 'get',
success: function(res) {
const {data, message, status} = res;
if(Number(status) === 200){
// 用户存在则获取用户任务侧写
$.axios({
url: "http://api.domain.com/get-user-profile" ,
success: function (res) {
// 执行查询成功的回调
}
})
}
}
})
这就是最常见的回调地狱。之所以举这个例子,是因为所有的网络操作,浏览器事件都是异步执行,异步执行的后果就是我们只能通过回调函数来完成层层递进的业务逻辑,一旦业务逻辑中每一个步骤,都要触发异步操作并且要依赖该异步操作的结果进行下一步操作,就会让开发人员陷入这种回调地狱。
在Promise 没有出现有没有办法处理这种情况? 有,jQuery封装了一个deferred对象,叫做延迟对象。封装的方法与Promise对象已经极其相似。
二. Promise
回归正题
了解了什么是回调地狱,当然要开始聊聊如何规避这种回调地狱,让代码更易读(上面的示例代码一旦继续增加嵌套,将变得难以阅读和理解)。Promise出现了,起初有很多开源库完成并开源了Promise对象的实现,但是直到ES6,Promise才成为JavaScript其中的一个标准。
Promise对象存在3中状态:pending, resolved, rejected。分别表示未完成,完成,拒绝(失败)。它的最后结果只有两种resolved和rejected。
使用Promise
什么是Promise,它是一个容器,用来存储一个