我通过实践了解到:NextJS 服务器操作是同步的。
我想实现并发;我喜欢将其抽象化的语法;因此我创建了一个具有以下语法的 NextJS API 端点:
import { handleError } form '@/lib/utils';
import { z } from 'zod';
const schema = z.object({ .. }); // some random unrelated zod schema
export async function POST(req: Request) {
try {
const myArgs = schema.parse(await req.json());
const data = await myServerAction(myArgs);
return Response.json({ data }, { status: 200 });
} catch (error) {
return handleError(error, req);
}
但是,我并不完全肯定这会同时运行。
有没有人可以自信地说/证明这确实是并发的,而不是像服务器操作那样同步?
尽管任何地方都没有这方面的文档,但我已经测试了很多次,答案就在这里
代码:
// api/relevant-chapters/route.ts
import { myServerAction } from '../actions.ts';
export async function GET(req: Request) {
const result = await myServerAction();
return Response.json({data: result});
}
// actions.ts
'use server';
export const myServerAction = async () => {
return await someAsyncQuery();
};
结论:是的,当您在 API 路由处理程序中导入服务器操作时,它会同时运行。