Объясните, пожалуйста, зачем люди в js используют подобные конструкции и насколько это полезно/разумно?
Там, где return:
const orders = await apiQueueService.executeInQueue(this.api.futuresOpenOrders) || []
return orders && Array.isArray(orders) && orders.map((o) => ({ ...o, orderId: String(o.orderId) })) || []
Как по мне, проверка на то, что orders - это undefined или что orders - это не массив - лишние. Часто ли такое используют?
Ответы (1 шт):
Тут половина кода - мусор.
const orders = await apiQueueService.executeInQueue(this.api.futuresOpenOrders) || []
// ^^^^^
В orders после такого никак не может быть ложного значения.
И даже если эту замену выкинуть, то
return orders && Array.isArray(orders) && orders.map((o) => ({ ...o, orderId: String(o.orderId) })) || []
// ^^^^^^ ^^^^^^^^^^^^^^^^^^^^^ ^^^^^
Нет ни одного ложного значения, на котором Array.isArray вернёт true.
Можно было бы подумать, что проверка нужна для сохранения конкретного ложного значения, но нет - в конце cнова ||.
Этот код без изменения функциональности упрощается до:
const orders = await apiQueueService.executeInQueue(this.api.futuresOpenOrders)
return Array.isArray(orders) ? orders.map((o) => ({ ...o, orderId: String(o.orderId) })) : []
Но и это фигня потому что:
Api должно возвращать ожидаемые данные, а не какой-то мусор. Какие основания полагать, что вместо массива может вернуться что-то другое, но если вернулся массив, то объекты в нём именно того типа, какой ожидается?
Если предполагается, что не массив - это ошибка, то её надо нормально обрабатывать, а не заменять данные на пустой массив. Обычно пустой массив является валидным результатом, а значит дальше эти ситуации уже не различить. Лучше бы вообще ошибки различать между собой, но если нет, то даже null был бы полезнее.
Преобразование id в строку тоже не радует.