async / await не работает в сочетании с fetch
Я пытаюсь использовать ES7 async
/ await
вместе с fetch
. Я знаю, что близок к этому, но не могу заставить его работать. Вот код:
class Bar {
async load() {
let url = 'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
try {
response = await fetch(url);
return response.responseText;
} catch (e) {
return e.message;
}
}
}
Который я использую следующим образом:
let bar = new Bar();
bar.load().then(function (val) {
console.log(val);
});
Почему-то я всегда попадаю в catch
с сообщением
response is not defined
Есть предложения, что я делаю не так ?
Обновление: как было предложено в комментариях, это может быть проблема с fetch
, поэтому я попробовал упрощенную версию (ES5):
<!doctype html>
<html>
<head>
<script>
var url = 'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json';
fetch(url, {method: 'get', mode: 'cors'}).then(function (response) {
console.log(response.responseText);
});
</script>
<head>
<body></body>
<html>
И все же не работает : (однако, если я заменю fetch, это сработает:
var request = new XMLHttpRequest();
request.open("GET", url, false);
request.send(null);
console.log(request.responseText);
1 ответ:
Вы забыли объявить
response
как переменную. Код класса-это всегда строгий код, и вам не сойдет с рук присвоение неявно глобальных переменных. Вместо этого он бросаетReferenceError
.Помимо этого,
Response
объекты не имеют свойстваresponseText
, как XHR, у них есть метод.text()
, который ожидает получения тела и возвращает обещание.class Bar { async load() { let url = 'https://finance.yahoo.com/webservice/v1/symbols/goog/quote?format=json'; try { let response = await fetch(url); // ^^^^ return await response.text(); // ^^^^^^ } catch (e) { return e.message; } } }