我的许多 JavaScript 文件中都出现了以下代码:
import { doA, doB, doC } from 'asyncDoer'
// ... other stuff
let isDoneA = false
let isDoneB = false
let isDoneC = false
doA.then(_ => isDoneA = true)
doB.then(_ => isDoneB = true)
doC.then(_ => isDoneB = true)
// ... other stuff
我想实现 Don't Repeat Yourself 并将该块放入 asyncDoer 中的单个导出函数中。类似于
doAll()
。
但无论我怎么想,我都想不通。主要是因为它们是 2 个以上不相关的、独立解决的 Promise。我的一个想法是以某种方式传递 isDoneA,B,C 作为引用,以便函数在承诺解析时修改它们。但我听说修改源参数是一个坏主意,它会使代码更难以阅读和维护。
任何人都可以帮助我如何将该块变成一个更简洁、可重复的单元吗?
您可以使用函数组合:
const compose = <K>(functions: Array<Function>) => {
return function (input?: K) {
return functions.reduceRight((acc, fn) => fn(acc), input)
}
}
const composedFunction = compose([doA, doB, doC])
composedFunction()