MST

星途 面试题库

面试题:Node.js多线程异步错误传播处理

在Node.js多线程场景下,若线程内执行一个异步操作(例如使用Promise)时出现错误,如何确保该错误能正确传播到主线程并被捕获处理?请给出具体代码实现思路及关键代码片段。
39.2万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 实现思路
    • 在Node.js中,虽然Node.js本身是单线程的,但可以通过worker_threads模块模拟多线程场景。
    • 当工作线程内的异步操作(如Promise)出现错误时,需要通过worker.postMessage()将错误信息发送回主线程。
    • 主线程通过监听worker.on('message')事件来接收错误信息并进行处理。
  2. 关键代码片段
    • 工作线程代码(worker.js)
const { parentPort } = require('worker_threads');

// 模拟异步操作
const asyncOperation = () => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            // 这里模拟一个错误
            reject(new Error('异步操作出错'));
        }, 1000);
    });
};

asyncOperation()
   .then(() => {
        parentPort.postMessage({ result: '成功' });
    })
   .catch((error) => {
        parentPort.postMessage({ error: error.message });
    });
  • 主线程代码(main.js)
const { Worker } = require('worker_threads');

const worker = new Worker('./worker.js');

worker.on('message', (message) => {
    if (message.error) {
        console.error('捕获到工作线程的错误:', message.error);
    } else {
        console.log('工作线程成功:', message.result);
    }
});

worker.on('error', (error) => {
    console.error('工作线程启动错误:', error);
});

worker.on('exit', (code) => {
    console.log(`工作线程退出,代码: ${code}`);
});