了解NodeJS上的异步/等待

我认为我对 的经验可能会影响我的理解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答案构建的函数以及控制器方法,是基于(对)其工作原理的(错误的)理解,因此我需要进行一些澄清和更正:

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

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

回答:

为了消除一些疑问-

  1. 您可以将其await与任何返回诺言的函数一起使用。您正在等待的功能async不一定是必需的。
  2. asyncawait在函数内使用关键字时,应使用函数。如果您不想await在函数内使用关键字,那么您就不必创建该函数async
  3. async默认情况下,函数返回一个promise。这就是您能够awaitasync运行的原因。

从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',

},

]);

};

以上是 了解NodeJS上的异步/等待 的全部内容, 来源链接: utcz.com/qa/399332.html

回到顶部