2. Promise / Deferred 模式
在上面的方式中,必须严谨地设置目标。如果想先执行异步调用,延迟传递处理的方式就可以选择使用 Promise / Deferred 模式
这个模式主要包含两个部分,即Promise和Deferred。
1. Promise/A 对单个异步操作做出了以下的抽象定义:
- Promise 操作只会处在3中状态的一种: 未完成态、完成态和失败态
- Promise 的状态只会出现在从未完成态或者失败态转化,不能逆反。完成态和失败态不能相互转化
- Pormise 的状态一旦转化,就不能修改
2. 在API的定义上,一个Promise对象只要具备then() 方法即可,
then的方法定义: then(fulfilledHandler, errorHandler, progressHandler)
- 接受完成态、错误态的回调方法。在操作完成或出现错误时,将会调用对应的方法。
- 可选地支持progress事件回调作为第三个方法
- then() 方法只接受function对象,其余对象将被忽略
- then() 方法继续返回Promise对象,以实现链式调用
3. 由于then()方法所做的事情是将回调函数存放起来,为了完成整个流程,还需要触发执行这些回调函数的地方,实现这些功能的对象成为 Deferred(延迟对象)
4. Promise和Deferred的整体关系
5. Promise中的多异步协作
通过使用all() 方法将多个异步操作合成一个新的Promise,只有当所有的Promise成功时才成功
6. Promise 进阶知识
- 支持序列执行的Promise
- 将API Promise化
这一块有空可以再去看看书