ECMAScript 6入门 学习笔记

时间:2022-09-12 18:51:34

1.Promise介绍

Promise是抽象异步处理对象以及对其进行各种操作的组件

使用new Promise实例化的promise对象有三个状态,“has-resolution”成功时,“has-rejection”失败时,“unresolved”也就是promise对象刚被创建后的初始化状态

promise.resolve作为new Promise()的快捷方式,在进行Promise对象的初始化或者编写测试代码的时候非常方便

具有then方法的对象是thenable,可以使用Promise.resolve()将 thenable转换为一个promise对象

2.(1)绝对不能对异步回调函数(即使在数据已经就绪)进行同步调用

    (2)如果对异步函数进行同步调用的话,处理顺序可能会与预期不符,可能会带来意料之外的后果

    (3)对一部回调函数进行同步调用,还可能导致栈溢出或异常处理混乱等问题

    (4)如果想在将来某一时刻调用异步回调函数的话,可以使用setTimeout等异步API

3.Promise#then 不仅仅是注册一个回调函数那么简单,他还会将回调函数的返回值进行变换,创建并返回一个promise对象

4.Promise.all(promise对象数组).then(fn)这时候会将所有的Promisedui对象组成一个数组,在所有的通信完成之后(变为fulfilled或rejected状态之后),才会调用.then方法。

传递给Promise.all()的Promise数组是同时开始执行的。

4.Promise.race(promise对象数组).then(fn)这时候会将所有的Promisedui对象组成一个数组,在其中任何一个Promise对象的通信完成之后(变为fulfilled或rejected状态之后),才会调用.then方法。
传递给Promise.race()的Promise数组是同时开始执行的。

5.使用promise.then(onFulfilled, onRejected) 的话
在 onFulfilled 中发生异常的话,在 onRejected 中是捕获不到这个异常的。

6.在 promise.then(onFulfilled).catch(onRejected) 的情况下
then 中产生的异常能在 .catch 中捕获

7.我们使用 .then 也能完成同样的工作。只不过使用 .catch 的话意图更明确,更容易理解。
Promise.resolve(42).then(throwError).then(null, onRejected);