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,它是一个容器,用来存储一个未来才会结束的事件的结果。
从它的实例化过程能很清晰的表明这个特点:
const pro

本文探讨了JavaScript中的回调地狱问题,介绍了Promise如何改善这一状况,并详细讲解了Generator函数的使用,以及如何利用Generator实现异步操作的同步化表达。文章还提到了Promise和Generator在前端框架如dva中处理异步action的重要性。

348

被折叠的 条评论
为什么被折叠?



