gpt4 book ai didi

javascript - Node.js 中的异步操作是否仅在执行服务器应用程序时才需要?

转载 作者:行者123 更新时间:2023-11-30 09:19:12 25 4
gpt4 key购买 nike

例如,在我正在编写的 Node.js 应用程序中,有一段代码包含在 async 函数中:

await a(param1);
await b(param2);
await c(param3);
await d(param4);

据我所知,如果我的应用程序是服务器,这会很好,因此例如向我的服务器发送请求的用户 1 可能处于 await a(param1); 阶段,也许这请求需要很多时间,因此处于 await b(param2); 阶段的另一个用户 2 仍然可以继续他们的请求(不必等待用户 1 的请求得到解决)。

但是,如果只有一个用户使用我的应用程序,我看不到使用异步代码的任何优势,因为使用 await 会将异步代码转换为“同步”,因为 funcion ba 完成后才会继续。

我的理解正确吗?


编辑:函数 abcd 返回 promise ,下一个 promise 取决于上一个。

最佳答案

Is my understanding correct?

如果 abcd 返回 promise (隐含地,因为它们是还有 async 功能,或显式),如果您在它们上使用 await ,它们可能会这样做。 async/await 不会使异步代码同步(那是不可能的),它们让您按照逻辑 流程而不是< em>时间流。

如果删除那些 await,您将更改代码的逻辑:不再运行 a 完成,然后运行 ​​b ,然后是 c,然后是 d,它将开始所有这些,它们都会重叠。所以不是这个:

const rnd = () => Math.floor(Math.random() * 800);

const runner = name => new Promise(resolve => {
console.log(name + " start");
setTimeout(() => {
console.log(name + " end");
resolve();
}, rnd())
});

const a = () => runner("a");
const b = () => runner("b");
const c = () => runner("c");
const d = () => runner("d");

(async() => {
await a();
await b();
await c();
await d();
console.log("after all calls");
})(); // In real code you'd catch errors
.as-console-wrapper {
max-height: 100% !important;
}

你会得到这个:

const rnd = () => Math.floor(Math.random() * 800);

const runner = name => new Promise(resolve => {
console.log(name + " start");
setTimeout(() => {
console.log(name + " end");
resolve();
}, rnd())
});

const a = () => runner("a");
const b = () => runner("b");
const c = () => runner("c");
const d = () => runner("d");

(async() => {
a();
b();
c();
d();
console.log("after all calls");
})(); // In real code you'd catch errors
.as-console-wrapper {
max-height: 100% !important;
}

这可能不是该代码的目的,无论它是在服务器上还是在单用户应用程序中。

就使用 Node.js 的各种“同步”方法(fs.readFileSync 而不是 fs.readFile 等)而言,是的,如果您不这样做不需要 Node.js 进程在读取文件时做任何其他事情(例如,它不需要做任何其他处理,比如作为服务器处理其他请求),您可以在单用户应用程序情况下使用它们.

关于javascript - Node.js 中的异步操作是否仅在执行服务器应用程序时才需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52903264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com