JS:将多个独立的 Promise 组合成一个函数

问题描述 投票:0回答:1

我的许多 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 作为引用,以便函数在承诺解析时修改它们。但我听说修改源参数是一个坏主意,它会使代码更难以阅读和维护。

任何人都可以帮助我如何将该块变成一个更简洁、可重复的单元吗?

javascript design-patterns async-await promise dry
1个回答
0
投票

您可以使用函数组合:

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()
© www.soinside.com 2019 - 2024. All rights reserved.