gpt4 book ai didi

javascript - 了解 NodeJS 上的异步/等待

转载 作者:数据小太阳 更新时间:2023-10-29 04:05:01 25 4
gpt4 key购买 nike

我认为我对它的理解可能受到我对 .NETasync/await 的体验的影响,所以我想要一些代码示例:

我试图让一个快速 Controller 在返回响应之前等待 5 秒:

const getUsers = async (ms) => {
var wait = ms => new Promise(resolve => setTimeout(resolve, ms));

await wait(ms);
};


export const index = (req, res) => {
async () => {
await getUsers(5000);

res.json([
{
id: 1,
name: 'John Doe',
},
{ id: 2,
name: 'Jane Doe',
},
]);
};
};

此代码不起作用,浏览器不断加载和加载,从不显示任何内容。

我根据this SO answer构建的getUser函数和 Controller 方法,基于我对它如何工作的(错误的)理解,所以我想要一些澄清和更正:

<强>1。我什么时候应该使用 await

据我了解,您应该在 async 函数调用之前使用 await。这个对吗?另外,为什么我可以在返回 promise 的非异步函数之前调用 await?

<强>2。什么时候应该使用 async

据我了解,您将函数标记为 async 函数,以便可以使用 await 关键字调用它。这个对吗?另外,[为什么] 我必须将我的 await getUsers(5000) 调用包装在匿名异步函数中?

最佳答案

解开几个疑惑——

  1. 您可以将await 与任何返回 promise 的函数一起使用。您正在等待的函数不一定是async
  2. 当您想在函数中使用await 关键字时,您应该使用async 函数。如果您不打算在函数内使用 await 关键字,则无需将该函数设置为 async
  3. async 函数默认返回一个 promise。这就是您能够 await async 函数的原因。

来自 MDN -

When an async function is called, it returns a Promise.

就你的代码而言,它可以这样写——

const getUsers = (ms) => { // No need to make this async
return new Promise(resolve => setTimeout(resolve, ms));
};

// this function is async as we need to use await inside it
export const index = async (req, res) => {
await getUsers(5000);

res.json([
{
id: 1,
name: 'John Doe',
},
{ id: 2,
name: 'Jane Doe',
},
]);
};

关于javascript - 了解 NodeJS 上的异步/等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44512388/

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