我在节点js中使用工作线程,下面是我在两个文件中的代码
worker.js
const mysql = require('mysql2');
const {
v1: uuidv1,
v4: uuidv4,
} = require('uuid');
const {parentPort, workerData} = require("worker_threads");
const dayjs = require('dayjs');
parentPort.postMessage(getRdvSlots(workerData.data));
async function getRdvSlots(data){
if(data.duration == 0 || data.address_id.trim() === "" || data.reasonId.trim() === "" || data.people_id.trim() === "" ){
return false;
}
let details = {};
let startDate = data.sel_date;
details["startDate"] = startDate;
let availableDates = await generateAvailableDates(data.people_id, data.address_id, data.reasonId, startDate);
let emptyAvailabilities = 0;
let slots = {};
for(let key in availableDates){
slots[key] = await getSlots(key, availableDates[key],data.people_id, data.duration);
}
details["slots"] = slots;
return JSON.parse(JSON.stringify(details));
}
在index.js中
app.get("/checkworker", async (req, res) => {
const worker = new Worker("./worker.js", {workerData: {data: req.query}});
worker.once("message", result => {
console.log(`${result}`);
res.send(result);
});
worker.on("error", error => {
console.log(error);
});
worker.on("exit", exitCode => {
console.log(`It exited with code ${exitCode}`);
})
});
在这件事上,我得到的错误是
DataCloneError:#不能被克隆。在对象上。\worker.js:10:12
,它位于parentPort.postMessage(getRdvSlots(workerData.data));
中的worker.js中。
我是nodejs工作线程的新手--任何帮助--代码中的错误
发布于 2022-01-26 16:54:12
我发现这个问题我也有同样的问题。我刚刚修复了它:)我试图发布到另一个线程的对象具有一个异步方法正在设置的属性。我没有在台词中加上“等待”:)
我认为这会解决你的问题:
parentPort.postMessage(await getRdvSlots(workerData.data));
https://stackoverflow.com/questions/70621998
复制相似问题