全部学科
Python全栈
python
NodeJS全栈
nodejs

NodeJS异步编程基础专题测试

20 题 40 分钟 难度:★★

考察知识点

  • 事件循环:事件循环阶段划分、微任务与宏任务优先级、事件循环生命周期
  • Promise:Promise状态与创建、链式调用、静态方法(all/race/allSettled)
  • async/await:async函数返回值特性、await使用规范、错误处理、并行执行
  • 回调函数:回调函数概念、错误优先模式、回调地狱问题与解决方案
💡 参考答案在文末
判断题
1

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

A

B

2

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

A

B

单选题
3

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

A

返回值永远是普通值

B

返回值自动包装为Promise对象

C

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

D

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

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

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

A

poll阶段

B

timers阶段

C

check阶段

D

pending callbacks阶段

7

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

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

8

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

A

setTimeout(callback, 1000)

B

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

C

Array.forEach(callback)

D

Promise.then(callback)

9

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

A

使用.then的第二个参数

B

使用try-catch包裹await语句

C

使用Promise.catch方法

D

直接判断await返回值

10

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

A

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

B

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

C

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

D

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

11

回调函数是什么?

A

一种特殊的循环结构

B

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

C

只用于错误处理的函数

D

必须是匿名函数才能使用

12

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

A

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

B

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

C

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

D

(status, result) - 状态和结果

13

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

A

setTimeout回调

B

setImmediate回调

C

Promise.then回调

D

fs.readFile回调

多选题
14

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

A

Promise.all

B

Promise.race

C

Promise.then

D

Promise.allSettled

15

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

A

await只能在async函数内部使用

B

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

C

await会阻塞整个程序执行

D

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

16

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

A

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

B

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

C

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

D

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

17

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

A

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

B

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

C

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

D

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

填空题
18

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

19

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

20

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

参考答案
1.正确 2.正确 3.B 4.B 5.D 6.B 7.C 8.C 9.B 10.A 11.B 12.B 13.C 14.A;B;D 15.A;B;D 16.A;B;C 17.A;B;C 18.Promise.all;await;同时 19.Promise.resolve;Promise.reject 20.try;catch;finally
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 NodeJS安全与稳定性专题测试
下一套试卷 → NodeJS性能优化专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码