1. .then .catch
更像是 回调函数罢了
1 | var promise = new Promise(function(resolve, reject) { |
2. 其实 .catch
只是 promise.then(undefined, onRejected)
的别名而已
到目前为止我们已经学习了如何通过 .then 和 .catch 来注册回调函数,这些回调函数会在promise对象变为 FulFilled 或 Rejected 状态之后被调用。
3. Promise.resolve 方法的话,可以认为它的作用就是将传递给它的参数填充(Fulfilled)到promise对象后并返回这个promise对象
4. Promise.reject(error)是和 Promise.resolve(value) 类似的静态方法,是 new Promise() 方法的快捷方式。
1 | 比如 Promise.reject(new Error("出错了")) 就是下面代码的语法糖形式。 |
5. new 一个promise的时候,其内部的一些程序就已经执行了。就像是在 constructor当中直接执行某些代码
1 | new Promise((resolve, reject) => { |
6. Promise在规范上规定 Promise只能使用异步调用方式 。
7. Promise#then 不仅仅是注册一个回调函数那么简单,它还会将回调函数的返回值进行变换,创建并返回一个promise对象
8. 这里我们再说一遍,实际上 Promise#catch 只是 promise.then(undefined, onRejected); 方法的一个别名而已。 也就是说,这个方法用来注册当promise对象状态变为Rejected时的回调函数。
9. return的值会由 Promise.resolve(return的返回值); 进行相应的包装处理,因此不管回调函数中会返回一个什么样的值,最终 then 的结果都是返回一个新创建的promise对象。
1 | var bPromise = new Promise(function (resolve) { |
第二遍看,重要语句概念摘抄
- promise的功能是可以将复杂的异步处理轻松地进行模式化, 这也可以说得上是使用promise的理由之一
- new生成的promise对象为了设置其值在 resolve(成功) / reject(失败)时调用的回调函数 可以使用promise.then() 实例方法。
promise.then(onFulfilled, onRejected) - promise.then 成功和失败时都可以使用。 另外在只想对异常进行处理时可以采用 promise.then(undefined, onRejected) 这种方式,只指定reject时的回调函数即可。 不过这种情况下 promise.catch(onRejected) 应该是个更好的选择。
用new Promise 实例化的promise对象有以下三个状态。
1
2
3
4
5
6
7
8"has-resolution" - Fulfilled
resolve(成功)时。此时会调用 onFulfilled
"has-rejection" - Rejected
reject(失败)时。此时会调用 onRejected
"unresolved" - Pending
既不是resolve也不是reject的状态。也就是promise对象刚被创建后的初始化状态等一般情况下我们都会使用 new Promise() 来创建promise对象,但是除此之外我们也可以使用其他方法。 在这里,我们将会学习如何使用 Promise.resolve 和 Promise.reject这两个方法。
静态方法Promise.resolve(value) 可以认为是 new Promise() 方法的快捷方式。
比如 Promise.resolve(42)
; 可以认为是以下代码的语法糖。1
2
3new Promise(function(resolve){
resolve(42);
});