- 实现思路:
- 在Node.js中,虽然Node.js本身是单线程的,但可以通过
worker_threads
模块模拟多线程场景。
- 当工作线程内的异步操作(如Promise)出现错误时,需要通过
worker.postMessage()
将错误信息发送回主线程。
- 主线程通过监听
worker.on('message')
事件来接收错误信息并进行处理。
- 关键代码片段:
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 });
});
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}`);
});