bounty将在6天后过期。回答此问题可获得+50声望奖励。acupoftea希望引起更多关注此问题。
考虑以下函数:
async function printAB() {
console.log("A");
await new Promise((resolve) => setTimeout(resolve, 1000));
console.log("B");
}
async function f() {
printAB();
printAB();
}
字符串f()
的通常预期输出为
A
A
B
B
型
因为console.log('A')
语句可以与超时并发执行。事实上,如果函数都在服务器上(操作或在服务器组件中定义)或都在客户端上,我们就会得到这样的结果。但是,如果printAB
是服务器操作,而f
是用户组件中的函数,我们会得到
A
B
A
B
型
.为什么会发生这种情况?如果我们同时使用多个操作,这种行为可能会导致性能降低,有没有办法避免它?
1条答案
按热度按时间5tmbdcev1#
react.dev "use server" docs(强调我的):
Server Actions是为更新服务器端状态的变化而设计的;不建议用于数据获取。因此,实现Server Actions的框架通常一次处理一个action,并且没有缓存返回值的方法。
我仍然不明白为什么,以及它是如何工作的细节。这是在服务器端完成的吗?这是否意味着如果有很多用户,他们将不会被并行服务,例如DB写?