#javascript
Вопрос:
Мой товарищ по команде написал код:
const getItem = async () => {
const res = await axios.get('/items/123214324').then(r =>
r.data.item).catch(err => console.log(err))
return res
}
Я думаю, что это абсолютная катастрофа(если мы используем async/await, то мы не используем then/catch, и наоборот). Но он говорит это хорошо. Кто прав?
Комментарии:
1. Рекомендуется придерживаться либо API promise, либо
await
. Но в этом нет необходимости . Нет никакого технического недостатка в смешивании того и другого. Проблема в том, что читать код может быть немного сложнее. Единственная проблема здесь в том, что если возникнет проблема, вы получите только журнал в консоли, ноawait
он будет продолжен. Возможно, это нормально. Возможно, и нет. Но это единственная потенциально неправильная вещь в коде.2. сложнее читать код — главная причина не использовать его…
3. Поэтому правило таково: если вы хотите это сделать — просто сделайте, если вам нужен читаемый код — просто не делайте этого.
4. Здесь есть одна проблема, заключающаяся в том, что ошибка не передается по цепочке. Таким образом, показанный улов будет возвращен
undefined
вgetData().then()
5. Смешивание этих двух не обязательно означает, что код труднее читать. IMO
data = await fetch(url).then(r => r.json())
более удобочитаем, чемresult = await fetch(url); data = await result.json();
или дажеdata = await (await fetch(url)).json()
. В основном это вопрос мнения. Общая рекомендация именно такова — рекомендация, а не правило.