为什么 Node.js 工作消息监听器先打印然后另一个控制台

问题描述

这段代码运行了两次,一次在主线程和工作线程上。

const {isMainThread,Worker,parentPort} = require('worker_threads')
console.log(`isMainThread: ${isMainThread}`);

if(isMainThread) {
    console.log('from main thread');
    const worker  = new Worker(__filename);
    worker.on('message',(message)=>{
        console.log(`message for Worker: ${message}`);
    });
    worker.on('error',(e)=>{
        console.log('error');
    });
    worker.on('exit',(code) => {
        console.log(code);
    });
} else {
    // case 1:
    console.log('from worker thread');
    process.exit();
    
    // case 2:
    console.log('from worker thread');
    parentPort.postMessage('hi worker!');
}

输出案例 1:

isMainThread: true
from main thread
isMainThread: false
0

为什么不从 else 执行 console.log?

输出案例 2:

isMainThread: true
from main thread
isMainThread: false
message for Worker: hi worker!
from worker thread
0

大多数时候worker "message" listener是如何先执行日志的? 尽管每次登录后都会调用 postMessage。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)