Понимание асинхронности и ожидания в JavaScript
Я пытаюсь понять, почему обещание не разрешается при использовании асинхронных и ожидающих ключевых слов. Ниже приведен код, который у меня есть
var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
const response = await fetch(a);
const data = await response.json();
return data;
}
console.log(fetchData());
Функция fetchData должна возвращать фактические данные, но она всегда возвращает объект обещания. Что я делаю неправильно?
Я ожидаю следующий вывод [{userId: 1, name: 'ss'}]
после вызова fetchData()
1 ответ
Способ асинхронной работы заключается в том, что он возвращает обещание. Итак, что вы можете сделать, это:
fetchData().then(data => console.log({data}))
И вы распечатаете свои данные!
Кроме того, вам не нужна эта строка:
const data = await response.json();
поскольку .json()
Метод является синхронным, и, следовательно, нет необходимости ждать, пока обещание будет выполнено.
Так что более простой способ сделать это будет:
var a = 'https://jsonplaceholder.typicode.com/posts';
async function fetchData() {
const response = await fetch(a);
data = response.json();
// do stuff with data, synchronously
return data;
}
так что вы хотите написать код без обратных вызовов, но тогда вам нужно использовать fetchData()
в асинхронном контексте, вот как вы можете это сделать:
async function asyncPrint(aPromise) {
console.log(await aPromise);
}
asyncPrint(fetchData);
и если ты злой, ты мог бы сделать:
console.asyncLog = asyncPrint;
так что вы можете запустить:
console.asyncLog(fetchData());