源码参考formily:

    1. export interface IMiddleware<Payload = any, Result = any> {
    2. (payload: Payload, next: (payload?: Payload) => Result): Result
    3. }
    4. export const applyMiddleware = (payload: any, fns: IMiddleware[] = []) => {
    5. const compose = (payload: any, fns: IMiddleware[]): Promise<any> => {
    6. const prevPayload = payload
    7. return Promise.resolve(
    8. fns[0](payload, (payload) =>
    9. compose(payload ?? prevPayload, fns.slice(1))
    10. )
    11. )
    12. }
    13. return new Promise((resolve, reject) => {
    14. compose(
    15. payload,
    16. fns.concat((payload) => {
    17. resolve(payload)
    18. })
    19. ).catch(reject)
    20. })
    21. }

    可灵活将UI与函数式进行耦合,适用于弹窗等场景