全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

NodeJS异步编程基础专题

专题说明

本专题面向Node.js初学者,系统讲解异步编程基础知识,从事件循环机制、Promise核心API到async/await语法和回调函数处理,帮助开发者理解Node.js异步编程模型的核心原理。

学习目标

  1. 理解Node.js事件循环的基本原理和微任务/宏任务优先级
  2. 掌握Promise的三种状态、链式调用和静态方法
  3. 学会使用async/await简化异步代码编写
  4. 理解回调函数的基本概念和错误优先模式
  5. 认识回调地狱问题及其解决方案

学习内容

本专题涵盖以下知识点:

  • 事件循环机制:事件循环阶段、微任务与宏任务优先级、执行顺序分析
  • Promise基础:三种状态、状态不可逆特性、链式调用、静态方法
  • async/await语法:async函数返回值特性、await暂停机制、错误处理、并行执行
  • 回调函数处理:回调函数定义、错误优先模式、回调地狱问题、解决方案

学习建议

  1. 这是Node.js异步编程的核心专题,务必扎实掌握
  2. 重点理解事件循环执行顺序,多写测试代码验证
  3. Promise是async/await的基础,先掌握Promise再学async/await
  4. 回调地狱问题在实际开发中常见,学会使用Promise和async/await解决
  5. 错误处理是异步编程的重要习惯,养成使用try-catch的习惯

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

Node.js事件循环包含多个阶段,以下哪个阶段最先执行?

A

poll阶段

B

timers阶段

C

check阶段

D

pending callbacks阶段

2
单选题

在Node.js事件循环中,以下哪种操作属于微任务?

A

setTimeout回调

B

setImmediate回调

C

Promise.then回调

D

fs.readFile回调

3
多选题

关于Node.js事件循环的生命周期,以下说法正确的是?

A

事件循环在主线程代码执行完毕后启动

B

事件循环只要有活跃的异步操作就会继续运行

C

process.nextTick在当前阶段结束后立即执行

D

事件循环是无限循环,永远不会停止

4
单选题

Promise对象有几种状态,且状态变化有什么特点?

A

两种状态,可以相互转换

B

三种状态,状态只能改变一次

C

三种状态,可以多次改变

D

四种状态,最终状态可逆转

5
单选题

以下代码最终输出什么?

JavaScript
Promise.resolve(1)
  .then(val => val + 1)
  .then(val => { throw new Error('error') })
  .catch(err => 10)
  .then(val => console.log(val));
A

1

B

2

C

Error: error

D

10

6
多选题

以下哪些是Promise的静态方法?

A

Promise.all

B

Promise.race

C

Promise.then

D

Promise.allSettled

7
单选题

async函数的返回值有什么特点?

A

返回值永远是普通值

B

返回值自动包装为Promise对象

C

只能通过return返回,不能抛出错误

D

必须使用await才能获取返回值

8
多选题

关于await的使用,以下说法正确的是?

A

await只能在async函数内部使用

B

await可以等待任何值,不只是Promise

C

await会阻塞整个程序执行

D

await后面的Promise失败时会抛出错误

9
填空题

使用async/await处理异步错误时,应该使用______语句包裹await表达式。当Promise被拒绝时,错误信息可以通过______块的参数获取。如果要确保无论成功失败都执行某段代码,可以使用_______块。

10
填空题

要让多个async操作并行执行而不是顺序执行,应该使用___________方法包裹所有Promise。例如:const results = ______ Promise.all([promise1, promise2]); 这样两个请求会______发起,而不是等待第一个完成后再执行第二个。

11
单选题

回调函数是什么?

A

一种特殊的循环结构

B

作为参数传递给其他函数并在适当时候被调用的函数

C

只用于错误处理的函数

D

必须是匿名函数才能使用

12
单选题

Node.js中回调函数的标准参数顺序是什么?

A

(data, err) - 数据在前,错误在后

B

(err, data) - 错误在前,数据在后

C

(callback) - 只有一个回调参数

D

(status, result) - 状态和结果

13
判断题

"回调地狱"是指多层嵌套回调导致代码难以阅读和维护的情况。

A

B

14
单选题

以下代码的输出顺序是什么?

JavaScript
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
A

1 2 3 4

B

1 4 2 3

C

1 4 3 2

D

4 1 3 2

15
单选题

创建一个Promise对象的正确语法是什么?

A

new Promise((resolve, reject) => { resolve('成功'); })

B

Promise.create((resolve, reject) => { resolve('成功'); })

C

new Promise(resolve, reject => { resolve('成功'); })

D

Promise((resolve, reject) => { resolve('成功'); })

16
填空题

使用Promise静态方法快速创建已完成的Promise:const p1 = _______________('成功'); 创建一个状态为fulfilled的Promise。使用const p2 = ______________('失败'); 创建一个状态为rejected的Promise。

17
单选题

以下代码中,如何正确捕获await Promise.reject()产生的错误?

A

使用.then的第二个参数

B

使用try-catch包裹await语句

C

使用Promise.catch方法

D

直接判断await返回值

18
判断题

async函数是Promise的语法糖,本质上返回一个Promise对象,await表达式会暂停async函数执行等待Promise解决。

A

B

19
单选题

以下哪种情况回调函数会同步执行?

A

setTimeout(callback, 1000)

B

fs.readFile('file.txt', callback)

C

Array.forEach(callback)

D

Promise.then(callback)

20
多选题

避免回调地狱的有效方法有哪些?

A

使用Promise链式调用替代嵌套回调

B

使用async/await让异步代码扁平化

C

将回调拆分为独立的命名函数

D

使用更多嵌套层级组织代码

← 上一个专题 NodeJS安全与稳定性专题
下一个专题 → NodeJS性能优化专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库