我有一个异步函数,可以像这样启动 NodeJS 工作线程:
encode : async (config) => {
if (isMainThread) {
const encode_worker = new Worker(`./service-encode.js`, { workerData: config });
encode_worker.on('message', (transcode_data) => {
log.info("%o", transcode_data);
return transcode_data;
});
encode_worker.on('error', (err) => { log.error(err)});
encode_worker.on('exit', (code) => {
if (code !== 0)
throw new Error(`Encoding stopped with exit code [ ${code} ]`);
console.log("* * * EXITED ENCODER WORKER * * *")
});
}
},
在serivce-encode.js
文件中,我有以下使用异步函数的代码。请注意,我postMessage
用来表示它已完成。
var transcoder = require('./transcoder');
const {Worker, isMainThread, parentPort, workerData} = require('worker_threads');
console.log("* * * STARTING ENCODE THREAD * * *\n");
console.log(workerData);
transcoder.run(workerData)
.then((results) => {
transcode_data = results;
parentPort.postMessage(transcode_data);
})
.catch(err => { throw err });
然后,我使用下面的示例代码,但'message'
上面事件中的代码会立即触发。也就是说,它似乎没有等到它完成:
encode(conf).then((encode_data) => { console.log("Encode Data :", encode_data);
该encode
函数工作正常,但该console.log
语句在调用 encode() 函数时立即执行 - encode_data
var 也是undefined
. 既然return
encode中的语句是在message
事件中,那async函数的promise不应该在那个时候解决吗?