spawn 找不到命令时为什么触发 error,try/catch 能接住吗?
区分 spawn 的参数校验异常、异步启动失败和程序非零退出,解释 ENOENT 的命令与 cwd 来源,并用 Promise 包装示例展示及时监听 error 以及只结算一次的调用接口。
异步编程专题面试题第 4 页,显示第 151–200 题,共找到 292 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
区分 spawn 的参数校验异常、异步启动失败和程序非零退出,解释 ENOENT 的命令与 cwd 来源,并用 Promise 包装示例展示及时监听 error 以及只结算一次的调用接口。
从 shell 解析、参数传递、输出消费和进程生命周期比较 spawn 与 exec,说明 execFile 的位置、大输出与长任务的选择,以及异步创建进程为什么仍需要处理背压和错误。
围绕“在 Worker 线程中 AsyncLocalStorage 等异步上下文能否跨线程传递”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出每个 Worker 有独立事件循环与上下文、跨线程传递需显式携带数据。
围绕“worker.terminate() 的语义是什么,调用后还能复用该 Worker 吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 terminate 强制结束线程返回 Promise、Worker 不可复用需重建。
比较同线程切片、工作线程、独立进程和外部作业的适用边界,说明数据传输、线程池、并发配额、取消和结果关联,避免把 async 或无限 fork 当作 CPU 优化。
以 fs.readFile 回调为具体上下文比较 setImmediate 与零延时定时器,说明 poll 到 check 的关系、定时器阈值,以及同步注册、await 续体和自定义事件的区别。
按回调职责解释 timers、pending callbacks、idle/prepare、poll、check 和 close callbacks,说明 libuv 1.45 后的定时器调整,并区分阶段图、nextTick 和 Promise 微任务。
围绕“async_hooks 的 init、before、after、destroy 四个回调分别在异步资源生命周期的什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须逐一说明四个钩子的触发点及 before/after 可能多次出现的原因。
围绕“Node.js 的 async_hooks 模块能追踪什么,为什么它被标记为实验性但仍被广泛使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明它能给每个异步资源分配 asyncId 并触发 init/before/after/destroy 回调,及性能与稳定性代价。
围绕“AsyncLocalStorage 如何在 Node.js 中实现跨异步调用的请求级上下文(如 traceId)传递”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 run 建立上下文、getStore 在后续异步回调中取值的机制。
围绕“哪些写法会导致 AsyncLocalStorage 的上下文在 Node.js 中丢失,比如事件监听或连接池复用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 emit 绑定的是 emit 时刻而非注册时刻上下文、资源复用导致串上下文等丢失场景。
围绕“在 Node.js 里做请求上下文传递,为什么优先 AsyncLocalStorage 而不是第三方 cls 或 z”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须从官方维护、性能与对 async/await 的正确支持论证选型。
围绕“Node.js 的 AsyncResource 类解决什么问题,自定义异步资源(如手写队列)为什么要显式使用它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明用户态异步抽象不会自动纳入 async_hooks 追踪需用 AsyncResource.runInAsyncScope 绑定。
围绕“Node.js 中 executionAsyncId 和 triggerAsyncId 分别代表什么,如何用它们还原”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分当前执行栈所属资源与触发创建该资源的资源,并说明因果链还原方式。
围绕“Node.js EventEmitter 的 captureRejections 选项解决了异步监听器里的什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 async 监听器 rejection 默认变 unhandledRejection 而该选项自动转为 error 事件。
围绕“设计一个 Node.js 内部模块时,什么时候应该继承 EventEmitter 而不是直接回调或返回 Promis”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按事件多次发生、多订阅者、生命周期事件的标准给出选择依据。
围绕“Node.js 的 events.on() 把 EventEmitter 转成异步迭代器,适用于什么场景,背压如何处”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明用 for await 消费事件的场景及内部缓冲与溢出行为。
围绕“Node.js 的 EventEmitter.emit 是同步还是异步派发?这对监听器里的异常有什么后果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须明确 emit 同步按注册顺序调用监听器且未捕获异常会冒泡中断后续监听器。
围绕“Node.js 中 async 函数里 await 一个 Promise 后,后续代码作为什么类型的任务恢复执行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 await 之后的续体以微任务形式排入队列及其对执行顺序的影响。
围绕“在 fs 回调等 I/O 回调里创建的 Promise.then 和 setImmediate 谁先执行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须利用 poll 阶段后先清空微任务再进入 check 的规则判断微任务先执行。
围绕“Node.js 中 new Promise 的 executor 是同步还是异步执行,这对错误捕获有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须明确 executor 同步执行且其抛错转为 rejection,区别于 then 回调的微任务时机。
围绕“在 Node.js 中嵌套的 Promise.then 链与多个并行 Promise 的回调按什么顺序交错执行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按 FIFO 队列逐次入队的规则推演链式与并行 then 的交错顺序。
围绕“Node.js 的 queueMicrotask() 与 process.nextTick、Promise.reso”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较三者进入的队列及错误处理行为差异,说明 queueMicrotask 属标准微任务队列。
围绕“官方建议哪些场景使用 process.nextTick,例如保证回调总是异步的 API 设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出统一同步/异步回调时机、在事件派发前让调用者先绑监听器等官方场景。
围绕“process.nextTick 队列和 Promise 微任务队列都清空时谁先执行?为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 nextTick 队列优先于 Promise 微任务队列的结论并解释队列分离的实现。
区分 require ESM 的引入版本、默认启用和警告变化,解释同步模块图、间接顶层 await、返回命名空间与动态 import 的边界,避免只按 Node 大版本判断兼容性。
围绕“在 Node.js ESM 中直接 import .wasm 文件需要满足什么条件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明需要 --experimental-wasm-modules 标志及顶层 await 的配合。
围绕“Node.js 的 domain 模块为什么被废弃,现在用什么机制做请求级错误上下文传播”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 domain 的缺陷及 AsyncLocalStorage/AsyncHooks 作为替代的定位。
围绕“Node.js 服务进程退出码(0/1 及 process.exitCode 与 process.exit())应该”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明设置 exitCode 让事件循环自然排空优于立即 exit()(避免截断异步写)。
围绕“在 Express 4 中如何为所有异步路由统一建立错误边界而不漏掉 Promise 拒绝”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出包装函数或路由层统一 catch 转 next(err) 的模式及漏包后果。
围绕“Express 的错误处理中间件为什么必须是四个参数,异步路由抛错为何不会自动进入它”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按函数长度识别错误中间件及 Express 4 不捕获 Promise 拒绝的边界(注明版本)。
区分 listen 参数同步异常与异步 server error,解释 EADDRINUSE、EACCES 的启动处理、就绪状态、退出码及有限重试,提供能真实复现端口占用的验证步骤。
逐项解释未处理 Promise 拒绝的五种 Node.js 模式,区分 throw 与 strict 的事件顺序、警告与退出码,以及监听器对行为的影响,提供独立进程验证方法。
围绕“为什么 for await 遍历 Node.js Readable 时提前 break 会自动销毁流,这替代不了哪种”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明异步迭代消费触发读并在提前退出时销毁流,但仍需捕获迭代抛出的上游错误。
围绕“Node.js Writable 在 end 之后再 write 会触发什么错误,为什么不能靠 try/catch ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要说明状态机拒绝 end 后写入并异步报 error,应用需监听 error 或用 promises API。
围绕“Node.js fs.createReadStream 打开失败时错误发生在哪一步,调用方如何避免把 open 错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答路径错误异步触发 error/close,pipeline 可统一捕获,重试策略需区分 ENOENT 与读中 EIO。
围绕“Node.js stream/promises 的 pipeline 与 finished 相比事件回调写法解决了哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Promise 化便于 await 完成或失败并统一清理,但仍不替代业务状态码处理。
围绕“Node.js Readable.from 把数组或异步迭代器转成流时,背压是否自动生效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖要回答 Readable.from 按拉取节奏消费迭代器并支持对象模式,但仍受下游 write/drain 制约。
围绕“在 Nuxt 3 的静态导出模式下,useAsyncData 的数据是否仍然在服务端获取?如何确保静态页面包含最新数”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明静态导出时 `useAsyncData` 仍可在构建时执行,但不能依赖实时数据。
围绕“如何在 useAsyncData 中根据条件决定是否执行数据获取?例如仅在用户登录后才拉取数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明在数据获取函数中判断条件并返回 `null` 或 `undefined`。
围绕“useAsyncData 的上下文对象(context)中包含哪些信息?如何在数据获取函数中使用它来访问请求头或路由”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `context` 提供 `request`, `params`, `query` 等属性。
围绕“useAsyncData 在服务端请求失败时,如何决定是否将错误传播给客户端?有哪些机制可以避免页面崩溃”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `reject` 与 `throw` 的区别,以及如何通过 `error` 字段和 `onError` 回调进行容错。
围绕“如何强制刷新 useAsyncData 缓存?是否有方法在组件内触发一次新的服务端数据获取”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明通过调用 `execute()` 方法触发重新请求。
围绕“useAsyncData 在服务端渲染期间是否会被多次调用?如何确保每个页面只执行一次数据获取”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 useAsyncData 的数据获取是基于页面路径与 key 进行唯一性判断,不依赖外部状态。
围绕“在 Nuxt 3 的 Island 架构中,useAsyncData 的数据获取是否会在每个 Island 内独立执”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Island 间默认隔离,数据不可共享,需通过全局状态或 API 共享。
围绕“useAsyncData 是否支持多个数据源同时获取?如何组织多个 useAsyncData 调用以避免阻塞”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明可通过多个独立调用并行执行,但需注意 key 冲突与缓存覆盖风险。
围绕“在 Nuxt 3 中,如何利用 useAsyncData 实现页面跳转前的预加载?需要满足哪些条件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 `prefetch: true` 与 `lazy: false` 的组合使用方式。
围绕“异步消息队列场景如何注入和提取 Trace Context,消费者晚到数小时会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须处理生产消费断链与延迟可见性。
围绕“数据库类程序该用 fsync 还是 fdatasync,为什么 fsync 是性能杀手”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分是否同步元数据以及等待磁盘确认的开销。
围绕“io_uring 相比 epoll + 线程池做磁盘异步 I/O 解决了什么核心问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明提交/完成双环形队列减少系统调用与拷贝、支持真正的文件异步。