meteo.js:21 Uncaught SyntaxError:等待仅在异步函数中有效

时间:2019-05-31 10:21:43

标签: javascript ecmascript-6 async-await syntax-error

我的代码有问题,我的代码中看不到天气API

  

未捕获的SyntaxError:等待仅在异步函数meteo.js:21中有效

if (WithIP) {
  const ip = await fetch('https://api.ipify.org/?format=json%27')
    .then(resultat => resultat.json())
    .then(json => json.ip);

  ville = await fetch("http://api.ipstack.com/json/' + ip + '?access_key=' + access_key")
    .then(resultat => resultat.json())
    .then(json => json.city);

} else {
  ville = document.querySelector('#ville').textContent;
} 

{
  const meteo = await fetch('http://api.openweathermap.org/data/2.5/weather?q=Marseille&appid=33119b4a3fa1ad278805578d27ea15de&lang=fr&units=metric%27')
    .then(resultat => resultat.json())
    .then(json => json)

2 个答案:

答案 0 :(得分:0)

以下是Mozilla开发人员的报价:

  

异步函数可以包含await表达式,该表达式会暂停异步函数的执行并等待所传递的Promise的分辨率,然后恢复异步函数的执行并返回解析的值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

答案 1 :(得分:0)

您只能在await函数中使用async-为避免使整个代码成为async函数,请使用IIFE,如下所示:

const ip = (async () => await fetch('https://api.ipify.org/?format=json%27'))();

由于您仍在使用.then链接,因此您可以完全删除await部分,而仅使用.then保持连续性。

fetch('https://api.ipify.org/?format=json%27').then(resultat => resultat.json()).then(...);