【发布时间】:2018-08-30 22:10:21
【问题描述】:
我正在使用 mongodb 和 apollo 服务器学习 node js 和 graphql,下面的代码按预期工作,但是我感觉代码可以改进。这是我的 graphql 解析器上的 sn-p:
Mutation: {
...,
createJob: async (parent, args, { Customer, Employee, Job }) => {
const newJob = await new Job(args).save();
newJob.assigned.map(async(employeeId) => {
const assignedEmployee = await Employee.findById(employeeId);
assignedEmployee.jobsHistory.push(newJob._id);
await assignedEmployee.save()
});
const customer = await Customer.findById(newJob.customer);
customer.jobs.push(newJob._id);
await customer.save();
return newJob;
}
正如我所说,代码按预期工作,但看着许多等待,我不能停下来想知道是否可以进行改进。任何帮助将不胜感激
【问题讨论】:
-
为什么你认为很多
awaits 会不好? -
无论调用
createJob是否理解它返回一个承诺并相应地处理它? (map肯定不会,所以这是个问题——就像使用map而不对它返回的数组做任何事情一样。) -
实际上你甚至错过了一个:
assigned.map(…)内部创建的承诺永远不会等待。您需要将其包装在await Promise.all(…)中。
标签: javascript node.js mongoose graphql