异步处理

89 阅读3分钟

一,异步操作对象

Promise 是 JavaScript 中用于处理异步操作的对象,它代表一个异步操作的最终完成(或失败)及其结果值。

Promise是一个对象,它有三种状态:

  1. pending(待定):初始状态。
  2. fulfilled (已兑现):操作成功完成。
  3. rejected(已拒绝):操作失败。

如果一个 Promise 已经被兑现或拒绝,即不再处于待定状态,那么则称之为已敲定(settled)。

Promise的创建与使用:

image.png

链式调用的基本原理:

Promise 的 .then() 和 .catch() 方法都会返回一个新的 Promise,这使得我们可以连续调用这些方法,形成链式结构。

链式调用的关键特点:

1.顺序执行: 每个.then()会等待前一个Promise解决后才执行。

2.值传递:前一个处理函数的返回值会传递给下一个处理函数。

3.错误冒泡:链中任何一个环节出错都会跳过后续.then()直到遇到.catch()。

image.png

image.png

image.png

image.png

promise静态方法

1.Promise.resolve()

创建一个立即 resolved的Promise:

```
```Promise.resolve('立即解析的值)
    .then( value => console.log(value));

2. Promise.reject()

创建一个立即 rejected的Promise:

```
```Promise.reject('立即拒绝的原因')
     .catch(reason>console.error(reason));

3. Promise.all()

等待所有 Promise完成:

```
```Promise.al1([promise1,promise2.promise3])
    .then(values{
        console.log('全部完成:',values);
        })
    .catch(error ={
        console.error('至少一个失败:'error);
        });

4. Promise.race()

取最先完成的Promise:

```
```Promise.race([promise1,promise2])
    .then( value=>(
        console.log('最先完成的:',value);
        });

注意事项

1.不要忘记返回:在.then()中如果进行异步操作,必须返回Promise

```
```//错误示例
somePromise.then( result =>{
anotherAsyncOperation(result);//没有return});
});
//正确示例
somePromise.then( result =>{
return anotherAsyncOperation(result); //返回Promise
})

2.错误处理位置: .catch()可以放在链的末尾,也可以放在特定位置

3.链的长度:过长的链可能会降低可读性,可以考虑拆分成多个函数

二,异步函数

1.async 函数

功能:声明一个异步函数

特点:

  • 自动将返回值包装为Promise。

  • 允许函数内使用await

  • 可以包含同步和异步代码

    ```asyno function fetchData(){
    return "data"; //自动包装为Promise.resolve("data")
    }
    //等价于
    function fetchData() {
    return Promise.resolve("data");}
    

2,定义方式

image.png

3.核心特性

总是返回: Promise:无论函数体返回什么,都会被自动包装为Promise

内部可以使用: await :可以暂停函数执行,等待Promise解决

错误处理:可以使用传统的try/catch语法

4,async函数返回值

image.png

image.png

即当async的返回值不是promise对象,也会将它变成promise对象,并且会是fulfiled成功的状态,走then部分。如果当async的返回值是promise对象,状态就会根据该对象的判断出来的状态来决定,fulfiled成功或者是rejected状态,走对应then或者catch部分。

三,异步操作关键字

1,await表达式

功能:暂停异步函数执行,等待Promise解决。

特点:

  • 只能在 async函数内使用。
  • 会"阻塞”后续代码执行(非真正阻塞线程)。
  • 返回 Promise解决的值,如果拒绝则抛出异常。

image.png

 

async ()和 await的对比:

async 和 await 是 JavaScript 中处理异步操作的现代语法,它们基于 Promise.

image.png

 

async 和 await的联系:

image.png