javascript - 如何重构此代码以消除重复?
问题描述
为了 DRY(不要重复自己)代码,我想知道下面给出的代码是否可以以任何方式重构。在下面的代码中,如您所见,我重复了两个赋值语句,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()
}
}
解决方案
您可能正在寻找
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 获取信息一次,这与您的原始代码的工作方式不同。
推荐阅读
- r - R:ksvm 函数 - 错误:对象不是矩阵
- python - cupy.full() 方法 fill_value 不能带数组?
- r - 创建具有重复子节名称的 R Bookdown 书 - 有效,但 ToC 始终链接到第一个实例
- mysql - kubernetes-How do I expose mysql service to another pod?
- c - 从整数转换为 IEEE 754 浮点数时如何进行舍入?
- javascript - 我的 Javascript 没有将我的 @RendorBody 推倒
- terraform-provider-aws - 使用 count.index 创建子网 ID 时,如何将不同的子网 ID 传递给 terraform aws_instance 资源?
- office-js - Windows 插件的 ItemSend 事件 Outlook 未触发
- python - 如何将 Cython 与诗歌一起使用?
- sql - [Right] .. JOIN 在实践中的用法