Async/await, "unresolved variable or type await"

4
    let usersInAuth0 = [];    
    for (let i = 0; i < 5; i++) {
      const usersInAuth0InPage = await getUsersFromAuth0(i); // error in WebStorm
      if (_.isEmpty(usersInAuth0InPage)){
        return res.status(200).send(usersInAuth0);
      } else {
        usersInAuth0.push(usersInAuth0InPage);
      }
    }

    const getUsersFromAuth0 = async (page) => {
      return await management.getUsers({per_page:100, page: page})
    }

尝试使用async/await。从auth0管理API中,每页只能获取100个用户,因此我会进行多次请求,直到获取所有用户。

WebStorm在第3行上发出警告:"未解决的变量或类型await"。

在这种情况下,我应该如何使用async/await?

1个回答

7
为了使用await,其所在的函数需要被标记为async。例如:
(async () => {
  let usersInAuth0 = [];    
  for (let i = 0; i < 5; i++) {
    const usersInAuth0InPage = await getUsersFromAuth0(i); // error in webstorm
    if (_.isEmpty(usersInAuth0InPage)){
      return res.status(200).send(usersInAuth0);
    } else {
      usersInAuth0.push(usersInAuth0InPage);
    }
  }

  const getUsersFromAuth0 = page => management.getUsers({per_page:100, page: page});
})();

https://codereviewvideos.com/blog/unresolved-variable-type-await/

请注意,由于management.getUsers返回一个Promise,您不需要使getUsersFromAuth0成为异步的-只需返回Promise并在更高层次上等待其解析即可。
因为async函数返回Promise,所以您需要确保无论什么消耗这整个代码块的东西都能够处理它的返回值是Promise。 (您的return res.status(200).send(usersInAuth0); 实际上不会返回该值-如果满足它所在的条件,则该函数将返回解析为该值的Promise)

当我直接复制粘贴时,会出现“解析错误,意外的令牌=>”错误。 - Geek Guy
听起来你正在使用一个不支持箭头函数的古老浏览器。理想情况下,在构建过程中使用Babel自动将ES6+语法(如箭头函数)转换为ES5语法。这样,您可以使用最新和最好的语言版本编写代码,同时也允许过时的浏览器理解您的脚本。 - CertainPerformance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接