Promise 入门笔记
Promise 对象用于异步计算
一个Promise表示一个现在、将来或永不可能可用的值。
按照用途来解释:主要用于异步计算
可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。
可以在对象之间传递和操作Promise,帮助我们处理队列。
为什么需要Promise
JavaScript为检查表单而生。
创造它的首要目标是操作DOM。
所以,javaScript的操作大多是异步的。
同步任务:顺序交付的工作1234,必须按照1234的顺序完成。
异步,则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作。等到系统完成前面的工作之后,再通过回调或者事件,继续做A剩下的工作。
从观察者的角度看起来,AB工作的完成顺序,和交付他们的时间顺序无关,所以叫“异步”。
浏览器中的js
异步操作以事件为主
回调主要出现在Ajax和File API
这个时候问题尚不算严重
Node.js之后,对异步的依赖进一步加剧了
无阻塞高并发,是Node.js的招牌
异步操作是其保障。
大量操作依赖回调函数。
异步回调的问题
”回调地狱“,根本不清楚自身的函数在哪个范围
回调有四个问题:
嵌套层级很深,难以维护。
无法正常使用return和throw
无法正常检索堆栈信息
多个回调之间难以建立联系
Promise 详解
Promise是一个代理对象,它和原先要进行的操作并无关系,只是把以前的操作,放到了执行器中
它通过引入一个回调, 避免更多的回调
Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤。
Promise状态一经改变,不会再改变
Promise实例一经创建,执行器立即执行。
Promise 有3个状态:
pending 待定 初始化状态
fulfilled 实现 操作成功
rejected 被否决 操作失败
.then()
.then()接受两个函数作为参数,分别代表fulfilled和rejected
.then()返回一个新的Promise实例,所以它可以链式调用
当前面的Promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行
状态响应函数可以返回新的Promise,或其他值
如果返回新的Promise,那么下一级.then()会在新Promise状态改变后执行
如果返回其他任何值,则会立刻执行下一级.then()