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

NodeJS事件驱动基础专题

专题说明

本专题面向Node.js初学者,系统讲解事件驱动编程基础知识,从事件循环机制、EventEmitter核心API到异步回调处理和错误处理,帮助开发者理解Node.js"单线程、非阻塞、事件驱动"架构的核心原理。

学习目标

  1. 理解Node.js事件循环的基本原理和核心特点
  2. 掌握setTimeout、setImmediate、process.nextTick的执行顺序
  3. 学会使用EventEmitter创建和触发自定义事件
  4. 理解on与once的区别及监听器管理方法
  5. 认识回调地狱问题及其解决方案

学习内容

本专题涵盖以下知识点:

  • 事件循环机制:单线程异步模型、事件循环阶段、setTimeout与setImmediate执行顺序、process.nextTick优先级、异步操作执行顺序分析
  • 事件发射器:EventEmitter基本使用、监听器数量限制、监听器执行顺序
  • 监听与触发事件:on与once区别、监听器移除方法、prependListener用法
  • 异步回调:回调地狱问题、回调最佳实践、错误处理规范

学习建议

  1. 这是Node.js入门的核心专题,务必扎实掌握
  2. 重点理解事件循环执行顺序,多写测试代码验证
  3. EventEmitter是Node.js很多模块的基础,理解其API用法
  4. 回调地狱问题在实际开发中常见,学会使用Promise解决
  5. 错误处理是Node.js编程的重要习惯,养成检查error参数的习惯

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

异步回调函数不会立即执行,而是在异步操作完成后,由事件循环调度执行。

A

B

2

Promise中未处理的拒绝会触发unhandledRejection事件,如果不处理会导致Node.js进程退出(Node.js v15+)。

A

B

3

process.nextTick的回调会在当前事件循环阶段结束后立即执行,优先于setTimeout和setImmediate。

A

B

4

CPU密集型同步操作会阻塞Node.js事件循环,导致其他异步操作延迟执行。

A

B

5

emitter.emit()方法返回true表示有监听器执行,返回false表示没有监听器。

A

B

6

EventEmitter默认单个事件最多注册10个监听器,超过限制会发出警告。

A

B

单选题
7

EventEmitter如果没有监听器处理error事件,触发error事件会导致什么后果?

A

静默忽略错误

B

输出错误到console

C

Node.js进程崩溃退出

D

创建默认错误处理

8

Node.js中try-catch语句无法捕获哪种类型的错误?

A

同步代码错误

B

异步回调中的错误

C

JSON解析错误

D

类型错误

9

多层异步回调嵌套导致的代码难以维护问题,通常称为?

A

异步循环

B

回调地狱(Callback Hell)

C

同步阻塞

D

内存泄漏

10

在IO回调中,setTimeout和setImmediate的执行顺序是什么?

A

setTimeout总是先执行

B

setImmediate总是先执行

C

执行顺序不确定

D

按添加顺序执行

11

未捕获的异常会导致Node.js进程退出,可通过什么事件捕获全局错误?

A

process.on('error')

B

process.on('uncaughtException')

C

emitter.on('error')

D

global.onError

12

EventEmitter的on方法和once方法的主要区别是什么?

A

on只能触发一次

B

once只能触发一次

C

on立即触发事件

D

once不触发事件

13

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

JavaScript
console.log('1');
setTimeout(() => console.log('2'), 0);
process.nextTick(() => console.log('3'));
console.log('4');
setImmediate(() => console.log('5'));
A

1 → 4 → 3 → 2 → 5

B

1 → 2 → 3 → 4 → 5

C

1 → 4 → 2 → 3 → 5

D

1 → 4 → 3 → 5 → 2

14

Node.js异步回调函数的第一个参数通常是什么?

A

返回数据

B

错误对象(Error-first模式)

C

状态码

D

配置对象

15

Node.js中创建自定义事件发射器需要继承哪个类?

A

EventTarget

B

EventEmitter

C

Observable

D

Subject

16

Node.js事件循环的核心特点是什么?

A

多线程并发执行

B

单线程异步非阻塞

C

同步阻塞执行

D

进程池模式

多选题
17

Node.js事件循环包含以下哪些主要阶段?

A

timers(定时器阶段)

B

poll(IO回调阶段)

C

check(setImmediate阶段)

D

close(关闭回调阶段)

填空题
18

EventEmitter常用方法: ____________ 注册持久监听器; ____________ 注册 ____________ 监听器; emit 触发 事件; removeListener 移除 监听器; setMaxListeners 设置最大监听器数量(默认 10 个)。

19

Node.js回调遵循 ____________ 模式,第一个参数是 ____________ 对象,第二个参数是 ____________ 。使用 try-catch 无法捕获 异步 回调中的错误。异步错误应在 回调函数 内处理,或使用 Promise 结合 async/await 捕获。

20

Node.js事件循环六个阶段顺序: ____________ 执行定时器回调; ____________ 执行延迟IO回调; ____________ / prepare libuv内部使用; poll 执行IO回调; check 执行 setImmediate 回调; close 执行关闭回调。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.正确 7.C 8.B 9.B 10.B 11.B 12.B 13.A 14.B 15.B 16.B 17.A;B;C;D 18.on;once;单次 19.Error-first;错误;数据 20.timers;pending;idle
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 NodeJS事件循环与异步模型
下一个专题 → NodeJS全局对象专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码