изо всех сил пытаюсь обернуть обещание асинхронным ожиданием

63
4

Я получил неожиданный идентификатор, но не уверен, в чем ошибка. Я использую fetch, который уже является обещанием.

async getUsers = () => {
const resp = await fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => response.json())

return resp
}

getUsers().then(users => console.log(users))

спросил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
1
Решение
89

Обратите внимание на позицию ключевого слова async:

Не:

async getUsers = () => {

Но:

getUsers = async () => {

Бежать:

getUsers = async () => {
const resp = await fetch('https://jsonplaceholder.typicode.com/posts/1')
.then(response => response.json())
return resp;
};

getUsers().then(users => console.log(users))

По комментариям:

Должен ли я цепь, then() в getUsers()? async/await предположим, чтобы устранить then() правильно?

Да, вы можете await любого Promise. Или используйте оба .then() иногда и await других (например, код выше). Но вы можете просто использовать async/await.

В приведенном ниже примере нет .then():

getUsers = async () => {
const resp = await fetch('https://jsonplaceholder.typicode.com/posts/1')
return resp.json();
};

(async () => {
// notice to use the await keyword, the code must be wrapped in an async function
const users = await getUsers();
console.log(users);
})();

ответил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
63

Помимо опечатки в асинхронном слове, обозначенном @acdcjunior, вы смешиваете async/await с обычной обработкой обещаний (.then()), которая не является неправильной, но вроде бы поражает точку. Использование только async/await будет выглядеть так:

const getUsers = async () => {
const resp = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return resp.json();
}

async function fetchUsers() {
try {
const users = await getUsers();
console.log(users);
} catch(err) {
console.log(err);
}
}

fetchUsers();

ответил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
45

Ваш синтаксис объявления вашей функции неверен, вот некоторые объяснения.

Если getUsers - это метод реагирующего класса компонента, синтаксис должен быть:

  getUsers = async () => {
const resp = await fetch(
'https://jsonplaceholder.typicode.com/posts/1'
).then(response => response.json());
return resp;
};

или же:

  async getUsers() {
const resp = await fetch(
'https://jsonplaceholder.typicode.com/posts/1'
).then(response => response.json());
return resp;
};

Если он находится за пределами реагирующего компонента компонента или в компоненте функции со стрелкой без состояния, вы можете использовать этот синтаксис:

  const getUsers = async () => {
const resp = await fetch(
'https://jsonplaceholder.typicode.com/posts/1'
).then(response => response.json());
return resp;
};

ответил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
45

const getUsers = async () => {
try {
const resp = await fetch('https://jsonplaceholder.typicode.com/posts/1');

return resp.json();
} catch(e) {
console.error(e)
}
}

(async () => {
const users = await getUsers();
console.log(users)
})()

Используйте это и выполните

ответил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
45

у вас синтаксис неправильный:

const getusers = async () => {
...
}

const необязательно

ответил(а) 2021-01-25T23:09:59+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема