Promise

2020-05-06  本文已影响0人  1baibai

1.什么是promise?

promise是ES6种新增的异步编程解决方案,在代码中的表现是一个对象;

2. 语法:

```

newPromise(function(resolve,reject){...}/* executor */);

```

promise对象不是异步的,只要创建promise对象就会立即执行存放的代码

3.promise是如何通过同步的流程来表示异步的操作的?

promise对象是通过状态的改变来实现的,只要状态发生改变就会自动触发对应的函数。

4.Promise对象的三种状态:

1. pending:默认状态,只要没有告诉promise任务是成功还是失败就是pending状态;

2. fulfilled(resolved):只要调用resolve函数,状态就会变为fulfilled,表示操作成功;

3. rejected: 只要调用rejected函数,状态就会变为rejected,表示操作失败;

注意点:状态一旦改变就不可逆,既从pending变为fulfilled,那么永远都是fulfilled;既从pending变为rejected,那么永远都是rejected;

5.then方法

- 可以通过上一个promise对象的then方法给下一个promise对象的then方法传递参数;

注意点:无论是在上一个promise对象成功的回调还是失败的回调传递的参数,都会传递给下一个promise对象成功的回调;

- 如果then方法返回的是一个Promise对象,那么会将返回的Promise对象的执行结果中的值传递给下一个then方法;

6.catch方法

catch其实是`then(undefined,()=> {})`的语法糖

注意点:如果不是用链式编程,那么会导致代码报错,原因如下:

- 如果promise的状态是失败,那么是没有对应失败的监听就会报错;

- then方法返回一个新的promise,新的promise会继承原有的promise的状态;

- 如果新的promise的状态是失败,但是没有对应失败的监听也会报错;

7.Promise的All静态方法

1. all方法接受一个数组

2. 如果数组中有多个Promise对象,只有都成功才会执行then方法,并且会按照添加的顺序,将所有成功的结果打包到一个新的数组中返回

3. 如果数组中不是promise对象,那么会直接执行then方法

应用场景:批量加载,要么一起成功,要么一起失败

8.Promise的race静态方法

1. all方法接受一个数组;

2. 如果数组中有多个Promise对象,谁先返回就听谁的,后返回的会被抛弃;

3. 如果数组中不是Promise对象,那么会直接执行then方法;

应用场景:接口调试,超时处理

上一篇下一篇

猜你喜欢

热点阅读