Понимание асинхронности и ожидания в 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());
Другие вопросы по тегам