#javascript #refactoring
#javascript #рефакторинг
Вопрос:
В интересах СУХОГО (не повторяйтесь) кода мне интересно, можно ли каким-либо образом реорганизовать приведенный ниже код. В приведенном ниже коде, как вы можете видеть, я повторяю инструкции для присваивания для обоих condition1
и condition2
поскольку в конце каждого из операторов if я выполняю другой вызов функции.
websocket.onmessage = async(event) => {
const data = JSON.parse(data)
let infoFromExternalApi1, infoFromExternalApi2, infoFromExternalApi3
// Assignments for infoFromExternalApi variables are repeated due to difference in function calls doSomething() and doSomethingElse()
if (condition1) {
infoFromExternalApi1 = await getInfoFromExternalApi1()
infoFromExternalApi2 = await getInfoFromExternalApi2()
infoFromExternalApi3 = await getInfoFromExternalApi3()
doSomething()
}
if (condition2) {
infoFromExternalApi1 = await getInfoFromExternalApi1()
infoFromExternalApi2 = await getInfoFromExternalApi2()
infoFromExternalApi3 = await getInfoFromExternalApi3()
doSomethingElse()
}
}
Комментарии:
1. Как насчет использования оператора if только с doSomething amp; doSomethingElse ?
2. Где вы используете
infoFromExternalApiN
переменные? Можете ли вы опубликовать свой фактический код?
Ответ №1:
Вы, вероятно, ищете
websocket.onmessage = async(event) => {
const data = JSON.parse(data)
let infoFromExternalApi1, infoFromExternalApi2, infoFromExternalApi3
if (condition1 || condition2) {
infoFromExternalApi1 = await getInfoFromExternalApi1()
infoFromExternalApi2 = await getInfoFromExternalApi2()
infoFromExternalApi3 = await getInfoFromExternalApi3()
}
if (condition1) {
doSomething()
}
if (condition2) {
doSomethingElse()
}
}
Конечно, это работает иначе, чем ваш исходный код, если выполняются оба условия, а именно получение информации из внешних API только один раз.