下面是一个Promise的实例
|
|
上面的代码中,timeout方法返回一个promise实例,表示一段时间以后才会发生的结果。过了指定的时间(ms参数)以后,Promise实例的状态变为reslove,就会触发then方法绑定的回调函数。
异步加载图片
|
|
使用Promise实现AjAX操作
|
|
参数的不确定
如果调用resolve函数和reject时带有参数,那么这些参数挥别传递给回调函数,reject函数的参数通常是Error对象的实例,表示抛出的错误。resolve函数除了正常的值意外,还有可能是另一个promise实例,表示异步操作的结果有可能是一个值,也有可能是另一个异步操作。
|
|
p1和p2都是promise的实例,但是p2的resolve方法将p1作为参数,即一个异步操作的结果是返回另一个异步操作
p1的状态改变了p2的状态,如果p1的状态是pending,那么p2的回调函数就会等待p1的状态改变,如果p1的状态已经是resolve或reject,那么p2的回调函数将会立即执行。
|
|
*注意~
- p1是一个Promise,三秒之后变为Reject
- p2的状态由p1决定,一秒之后,p2调用resolve方法
- 此时p1的状态还没有改变,p2的状态也不会变
- 两秒之后,p1变为Rejected,p2也跟着变为Rejected