http://liubin.org/promises-book/
来源:互联网 发布:淘宝借贷平台 编辑:程序博客网 时间:2024/06/04 23:56
-
实例方法都用 instance#method 的形式。
比如
Promise#then
这种写法表示的是 Promise的实例对象的then
这一方法。
对象方法都采用 object.method 的形式。
这沿用了JavaScript中的使用方式,
Promise.all
表示的是一个静态方法。
- 1. Chapter.1 - 什么是Promise
- 个人感觉Promise相当于设计模式中的模板模式。
- Promise模式对需要回调函数作为参数的函数进行包装。将原函数放入Promise对象,将原函数需要的回调函数放置到Promise.then().catch(). 通过创建Promise对象时,传递的回调函数的参数resolve, reject参数进行映射。resolve对应then(), reject对应catch()
2. Chapter.2 - 实战Promise
静态方法Promise.resolve(value)
可以认为是 new Promise()
方法的快捷方式。
Promise.resolve
方法另一个作用就是将 thenable 对象转换为promise对象。
就像我们有时称具有 .length
方法的非数组对象为Array like一样,thenable指的是一个具有 .then
方法的对象
除了在编写使用Promise的类库等软件时需要对Thenable有所了解之外,通常作为end-user使用的时候,我们可能不会用到此功能。Promise.reject(error)
是和 Promise.resolve(value)
类似的静态方法,是 new Promise()
方法的快捷方式。
2.3. 专栏: Promise只能进行异步操作?
这个问题的本质是接收回调函数的函数,会根据具体的执行情况,可以选择是以同步还是异步的方式对回调函数进行调用。
mixed-onready.js会根据执行时DOM是否已经装载完毕来决定是对回调函数进行同步调用还是异步调用。
Effective JavaScript 的 第67项 不要对异步回调函数进行同步调用 中也有详细介绍。
前面我们看到的 promise.then
也属于此类,为了避免上述中同时使用同步、异步调用可能引起的混乱问题,Promise在规范上规定Promise只能使用异步调用方式 。
2.4. Promise#then
这其中,我想大家已经认识了 .then().catch()
这种链式方法的写法了,其实在Promise里可以将任意个方法连在一起作为一个方法链(method chain)。
2.4.2. promise chain 中如何传递参数
那就是在 Task A 中 return
的返回值,会在 Task B 执行时传给它。
2. Chapter.2 - 实战Promise
静态方法Promise.resolve(value)
可以认为是 new Promise()
方法的快捷方式。
Promise.resolve
方法另一个作用就是将 thenable 对象转换为promise对象。
.length
方法的非数组对象为Array like一样,thenable指的是一个具有 .then
方法的对象Promise.reject(error)
是和 Promise.resolve(value)
类似的静态方法,是 new Promise()
方法的快捷方式。
2.3. 专栏: Promise只能进行异步操作?
这个问题的本质是接收回调函数的函数,会根据具体的执行情况,可以选择是以同步还是异步的方式对回调函数进行调用。promise.then
也属于此类,为了避免上述中同时使用同步、异步调用可能引起的混乱问题,Promise在规范上规定Promise只能使用异步调用方式 。2.4. Promise#then
这其中,我想大家已经认识了 .then().catch()
这种链式方法的写法了,其实在Promise里可以将任意个方法连在一起作为一个方法链(method chain)。
2.5. Promise#catch
很多压缩工具自带了将promise.catch
转换为 promise["catch"]
的功能2.6. 专栏: 每次调用then都会返回一个新创建的promise对象
然而实际上不管是
then
还是 catch
方法调用,都返回了一个新的promise对象。没有使用promise的方法链方式,这在Promise中是应该极力避免的写法。
2.10. then or catch?
.then
方法中的onRejected参数所指定的回调函数,实际上针对的是其promise对象或者之前的promise对象,而不是针对 .then
方法里面指定的第一个参数,即onFulfilled所指向的对象,这也是 then
和 catch
表现不同的原因。
由于 .catch
方法是 .then
的别名,我们使用 .then
也能完成同样的工作。只不过使用 .catch
的话意图更明确,更容易理解。
2.10.2. 总结
这里我们又学习到了如下一些内容。
使用
promise.then(onFulfilled, onRejected)
的话在
onFulfilled
中发生异常的话,在onRejected
中是捕获不到这个异常的。
在
promise.then(onFulfilled).catch(onRejected)
的情况下then
中产生的异常能在.catch
中捕获
.then
和.catch
在本质上是没有区别的需要分场合使用。
0 0
- http://liubin.org/promises-book/
- http://oss.org.cn/kernel-book/
- http://www.nginx.cn/ http://tengine.taobao.org/book/
- ANTLR资料 学习ANTLR http://book.antlr.org.cn
- http://lfs.linuxsir.org/main/?q=book/print/
- HBase架构 http://hbase.apache.org/book.html#_architecture
- Promises
- 闭包 (closure)是啥?http://liubin.itpub.net/post/325/6688
- 制作UBUNTU U盘启动盘(http://www.debuntu.org/book/export/html/160)
- wxpython online book: http://www.wxpython.org/docs/api/indices.html
- nginx开发从入门到精通 http://tengine.taobao.org/book/
- http://club.book.csdn.net/book/183400.html
- 怎样在windows环境中启动某控制台程序并改变它的stdin、stdout和stderr? http://book.77169.org/ask18/how106297.htm
- JavaScript Promises
- JavaScript Promises
- 初识Promises
- 使用Promises
- JavaScript Promises
- spring 和mybatis整合时 使用context:property-placeholder载不进属性 还报org.springframework.beans.factory.BeanCrea
- Launcher3源码浅析(5.1)--OverviewMode
- 设计模式——单例模式
- 进程与线程的区别
- C++编程基础笔记章节三
- http://liubin.org/promises-book/
- Android Studio 修改项目包名(Xposed)
- 一个简单的线程池(仿java的ScheduledFuture)
- 文件描述符的本质
- 事件分发之ViewGroup.dispatchTouchEvent(Android5.0)
- tomcat7-maven-plugin使用
- 用 Chrome 运行Android应用
- 《开发软件》Myeclipse.10.0+EditPlus+SQLserver2012
- 求两个数组的中位数,不合并数组