【问题标题】:await (async ():Type => {return value})() :: error Cannot find name 'await'.ts(2304)await (async ():Type => {return value})() :: 错误找不到名称'await'.ts(2304)
【发布时间】:2020-05-28 08:22:53
【问题描述】:
// Does not work - Cannot find name 'await'.ts(2304)
let someVariable = await (async ():someType => {
   // i need to use await inside here so i need it async
   return someValue;
})();

// does work, but not async.
let someVariable2 = (():someType => {
   // cant use await inside
   return someValue
})();

我尝试将 await 包裹在另一组弧形括号内,但仍然无法正常工作。是的,我知道我可以声明一个函数,然后像往常一样调用它,但我宁愿这样。如果不可能,那么就回到正常的方式。

我不完全知道() 在这种情况下会做什么,但我假设它会返回里面的对象。可以像这样使用 async/await 吗?如果可能的话,还想详细了解() 在这种情况下的工作原理。

代码在 Deno 上运行
编辑:人们说“必须在异步块内使用等待”Deno 具有顶级等待。

澄清。

// this is top-level
async function somefunc() {}
await somefunc(); // this WORKS on deno.

问题是let var = await(async () => {})() 创建了上述错误,我正在尝试找到一种方法来解决这个问题,而不是先声明然后等待它

编辑:https://github.com/microsoft/TypeScript/issues/38483

【问题讨论】:

  • 您只能在async 函数中使用await,并且大概是从全局范围内运行它。
  • 这能回答你的问题吗? TypeScript: cannot find name async/await
  • deno 有顶级 await,不需要放在异步块中
  • "Deno 有顶级 await" --- typescript 没有。它最终运行在哪里并不重要,你需要先编译它。
  • @zerkms 带有 deno 和 ide 扩展(抑制/更改错误)。 deno 在没有 tsc 的情况下运行 typescript

标签: javascript typescript async-await


【解决方案1】:

await 只能在异步块内。确保外部 await 也在异步块中,或者您可以将 promise 保存在 someVariable 中。


let someVariable = (async ():someType => {
   return someValue;
})();

someVariable.then((result) => {
 // result contains whatever u returned in the async block.
})

const someVariable = (async () => {
  const result = await Promise.resolve('Hey there!')
  return result;
})()

someVariable.then(result => console.log({ result }))

【讨论】:

  • Deno 有顶层 await
【解决方案2】:

Await 必须在异步函数中调用。

  const aFunc = async () =>{
      let someVariable = await (async ():someType => {
         const someValue = await asyncFunc()
         return someValue;
      })();
      // Now you get the value
      console.log(someVariable)
}
aFunc()

现在您可以调用aFunc 函数使其工作

【讨论】:

  • Deno 有顶层 await
  • @eme2n 对了,我的代码还满足你的要求吗? Deno 是新的,你可以在这里查看这个问题讨论:github.com/denoland/deno/issues/471
  • 问题已关闭并实现了顶级等待(我有多个 deno 应用程序使用它)查看根 cmets
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 2019-12-25
  • 2020-06-24
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-08-22
  • 2019-08-14
相关资源
最近更新 更多