「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。
一、异步解决方案Promise
1.1 promise的意义及基本使用
promise翻译过来是承诺的意思。是异步的一种解决方案。promise是一个对象,他可以获得异步操作的消息。他的参数是一个函数,该函数包括两个参数resolve和reject。resolve成功时调用,reject失败时调用
promise有三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。
promise只有两种状态改变方式方式,即从pending到fulfilled和从pending到rejected.并且在rejected和fulfilled时,状态不可以再更改。下面的代码就说明当fuldfilled状态时,不能再变为失败状态。
promise也有缺点:如下
- 一旦建立就会立即执行,无法中途取消
- 在不设置回调函数的情况下,内部出现错误,无法反馈到外部
- pending状态时,无法得知进行到哪一阶段。
下面是基本使用写法:
1.2 .then方法
then方法接收两个函数作为参数,第一个函数式promise成功时的回调,即resolve.第二个参数是promise失败时的回调,即reject。要注意的是,这两个函数只会被执行一个,不可能都执行
我们还要知道new Promise内的内容会立即执行。而且,要当javascript主线程内的内容全部执行完,才会执行回调函数的内的内容。如下代码即可说明这一点,下面代码在控制台打印出的顺序是1 2 3
1.3 catch方法
我们之前都用then的第二个参数作为promise失败时的回到(也就是reject()时)。其实我们还可以用catch来捕获错误。写法如下:
1.4 解决Callback Hell问题
下面是一段Callback Hell代码。
我们可以用promise来完美的结局回调地狱问题,让代码的可读性和可维护性都变得更加友好。而且我们可以使用这种链式结构,让我们的代码变得更清晰