在 nodejs 中使用异步等待的叉子不起作用
Fork with async await in nodejs not working
我试过在节点中分叉。对于简单的计算,它似乎工作正常。但是当我使用 for 循环时,我没有得到任何结果。我也尝试过使用 promise,但我得到的只是 promise pending。下面是使用的代码。
在moduleProgress.js中:
const getModules = async (studentArray) => {
let progress = [];
for (const student of studentArray) {
console.log(student); //prints the first student id an then nothing happens
let std = await User.findById(student); //stops here
console.log(std); //nothing
std = {
username: std.username,
firstname: std.firstname,
lastname: std.lastname,
batch: std.batch,
};
progress.push(std);
}
return progress;
};
process.on("message", async (params) => {
const progress = await getModules(params.students);
process.send(progress);
});
在另一个文件中:
if (students.length > 0) {
const calculation = fork("helpers/moduleProgress.js");
calculation.send({
students: students,
});
calculation.on("message", (response) => {
allStatus = response;
console.log(response)
});
res.json({
success: true,
allProgress: allStatus,
});
解决了。
在 moduleProgress.js (child) 中调用了 mongoose 的实例,它起到了很好的作用。
我试过在节点中分叉。对于简单的计算,它似乎工作正常。但是当我使用 for 循环时,我没有得到任何结果。我也尝试过使用 promise,但我得到的只是 promise pending。下面是使用的代码。
在moduleProgress.js中:
const getModules = async (studentArray) => {
let progress = [];
for (const student of studentArray) {
console.log(student); //prints the first student id an then nothing happens
let std = await User.findById(student); //stops here
console.log(std); //nothing
std = {
username: std.username,
firstname: std.firstname,
lastname: std.lastname,
batch: std.batch,
};
progress.push(std);
}
return progress;
};
process.on("message", async (params) => {
const progress = await getModules(params.students);
process.send(progress);
});
在另一个文件中:
if (students.length > 0) {
const calculation = fork("helpers/moduleProgress.js");
calculation.send({
students: students,
});
calculation.on("message", (response) => {
allStatus = response;
console.log(response)
});
res.json({
success: true,
allProgress: allStatus,
});
解决了。 在 moduleProgress.js (child) 中调用了 mongoose 的实例,它起到了很好的作用。