我认为我对 .NET 的经验可能会影响我的理解async/await,因此我想一些代码示例:
async/await
我正在尝试让快速控制器在返回响应之前等待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', }, ]); }; };
该代码不起作用,浏览器不断加载和加载,从不显示任何内容。
getUser我基于此SO答案构建的函数以及控制器方法,是基于(对)其工作原理的(错误的)理解,因此我需要进行一些澄清和更正:
getUser
1.我应该什么时候使用await?
await
据我了解,您应该await在async函数调用之前使用。这样对吗?另外,为什么我可以在返回承诺的非异步函数之前调用await?
async
2.我async什么时候应该使用?
据我了解,您将一个函数标记为一个函数,async以便可以使用await关键字来调用它。这样对吗?另外,[为什么]我必须将awaitgetUsers(5000)呼叫包装在匿名异步函数中?
awaitgetUsers(5000)
为了消除一些疑问-
从MDN -
调用异步函数时,它将返回一个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', }, ]); };