为什么不等待在Firefox上使用异步

时间:2018-12-27 04:48:53

标签: javascript async-await fetch

基本上我有此功能

async function get(url){
  const response = await fetch(url);
  const resData = await response.text();
  return resData;
}

然后我有这个电话

let data = await get(am_url);

该代码在google chrome上可以正常运行,但是在Firefox上,我在呼叫行上收到此错误:

SyntaxError:等待仅在异步函数和异步生成器中有效

这里的问题是什么,对于我的一生,我似乎无法在Firefox上完成这项工作,也无法弄清原因

例如,如果我在firefox和google chrome上打开google.com,则转到控制台,并在chrome上运行此代码,它将运行,但是在firefox上,它将引发我提到的错误

async function get(url){
  const response = await fetch(url);
  const resData = await response.text();
  return resData;
}

let data = await get("http://google.com");
console.log(data)

4 个答案:

答案 0 :(得分:4)

主要是将下面的代码放入自动执行的异步函数中,或使用.then。

ng build --exclude views

应更改为

let data = await get(am_url);

(async()=>{ let data = await get(am_url) })

答案 1 :(得分:0)

大多数JavaScript控制台不在顶层等待。

Google Chrome开发者工具控制台是一个例外。他们在late 2017 in Chrome 62

中添加了该功能

这就是为什么在Firefox中您必须兑现承诺的原因,例如使用then / catch。

答案 2 :(得分:0)

如错误所示,await仅在内部 async函数中起作用。

但是有2个渔获物:

  1. 开发者控制台在await功能之外支持async,只是为了简化您的生活。 Chrome首先这样做,然后是Firefox最近。您的示例现在在两种浏览器中均可使用。
  2. 在ECMAScript的未来版本中,您将可以在await函数外部使用async,它被称为"top-level await",因此代码很快就可以在任何地方使用。

答案 3 :(得分:-2)

await在顶级代码中无效 请找到参考文献here