在JavaScript中,Promise的基本用法包括哪些方面?请简要说明其核心API和典型调用方式。
考察说明
考查对Promise基本用法和核心API的掌握。
回答思路
- 【回答框架 1】Promise是JavaScript中用于异步编程的对象,代表一个尚未完成但预期会完成的操作,其核心状态包括pending、fulfilled和rejected。
- 【回答框架 2】基本用法包括创建Promise实例,通过new Promise构造器传入一个执行器函数,该函数接收resolve和reject两个参数,分别用于将状态变为fulfilled和rejected。
- 【回答框架 3】通过then方法注册成功和失败的回调,then返回新的Promise支持链式调用;catch方法专门处理rejection;finally方法无论结果如何都会执行。
- 【回答框架 4】Promise提供静态方法如all、race、allSettled、any,分别处理多个Promise的并发场景,all等待全部成功或任一失败,race返回率先完成的Promise,allSettled等待所有结束,any返回第一个成功的Promise。
- 【回答框架 5】在实际使用中,常用async/await是基于Promise的语法糖,使异步代码更接近同步写法,但底层仍是Promise机制。
- 【关键点 1】Promise有三种状态:pending、fulfilled、rejected,状态一旦改变不可逆。
- 【关键点 2】then可接收两个回调,第一个处理成功,第二个处理失败,返回新Promise支持链式调用。
- 【关键点 3】catch用于捕获链中的错误,finally无论成功失败都会执行。
- 【关键点 4】Promise.all适用于多个独立异步任务全部完成后继续,Promise.race用于竞速场景。
- 【关键点 5】async/await是Promise的语法糖,但遇到rejection需要try/catch捕获。
- 【易错点 1】在then回调中不返回值或返回非Promise值会导致链式传递类型变化。
- 【易错点 2】未捕获的Promise rejection可能导致未处理的错误。
- 【易错点 3】Promise.all中任一失败即整体失败,需使用allSettled避免该行为。