read book of javascript-promise
JavaScript-Promise笔记
创建Promise对象
第一种创建方法:
new Promise(fn)
返回一个Promise对象
- 在
fn
中指定异步等待处理:① 处理结果ok,调用resolve(value)
② 处理结果错误的话,调用reject(error Object)
1 | new Promise(function(resolve, reject){ |
那么,返回的Promise对象如何进行下一步操作?
用法:
promise.then().catch()
, then函数内为正常逻辑处理流程, catch函数内针对reject或其它异常处理。
第二种创建方法:
Promise.resolve(value)
<=> new Promise(fn)
, promise.resolve()返回的也是一个Promise对象,所以也可以对其返回值进行链式调用,then, catch ….
关于then方法
.then()
中指定的方法调用是异步进行的。
e.g.
1 | //test.js |
运行test.js
后发现结果为111,33333,2
分析:
JavaScript代码会按照文件的从上到下的顺序执行,所以最开始, 执行输出为111,然后执行
resolve(2)
, 这时,Promise对象状态已是确定状态,即:fulfilled被置为2. 接着执行promise.then()的代码,它注册了里面的回调函数,由于promise.then执行的时候promise对象已经是确定状态,理论上来讲,这个回调函数应该是同步被执行的,但是实际上是没有的!这时因为promise.then注册回调函数的时候,Promise对象不管其对象是否已经是确定状态,Promise都会以异步的方式调用回调函数,这是Promise设计上的规定!!!
Promise规范:异步函数只能被异步调用! 因为Promise保证了每次调用都是异步进行的,所以不需要使用setTimeout
来实现异步调用。
每次调用then都会返回一个新创建的promise对象,不管是then还是catch方法调用,都返回了一个新的promise对象。
版权声明:
本文由Lomo创作和发表,采用署名(BY)-非商业性使用(NC)-相同方式共享(SA)国际许可协议进行许可,
转载请注明作者及出处,本文作者为Lomo,本文标题为read book of javascript-promise.