js异步串行

interface Config<T, K> {
  params: T; //串行参数
  conditionSync: (beforeResult: any, currentParams: any) => K; //同步条件处理
  conditionASync?: (beforeResult: any, currentParams: any) => K; //异步条件处理
}

let configs: Config<{ key: string }, string>[] = [
  {
    params: { key: "1" }, //串行参数
    conditionSync: (beforeResult: any, currentParams: any) => {
      //自定义逻辑处理
      console.log(
        "第一个处理家-",
        "当前值:",
        beforeResult,
        "前一次处理结果:",
        currentParams
      );
      return beforeResult + "-" + currentParams;
    },
  },
  {
    params: { key: "2" },
    conditionSync: (beforeResult: any, currentParams: any) => {
      //自定义逻辑处理
      console.log(
        "第二个处理加*",
        "当前值:",
        beforeResult,
        "前一次处理结果:",
        currentParams
      );
      return beforeResult + "*" + currentParams;
    },
  },
  {
    params: { key: "3" },
    conditionSync: (beforeResult: any, currentParams: any) => {
      //自定义逻辑处理
      console.log(
        "第三个处理加¥",
        "当前值:",
        beforeResult,
        "前一次处理结果:",
        currentParams
      );
      return beforeResult + "¥" + currentParams;
    },
  },
  {
    params: { key: "4" },
    conditionSync: (beforeResult: any, currentParams: any) => {
      //自定义逻辑处理
      console.log(
        "第四个处理加&",
        "当前值:",
        beforeResult,
        "前一次处理结果:",
        currentParams
      );
      return beforeResult + "&" + currentParams;
    },
  },
];
let serialApi = configs.reduce(async (ac, cr) => {
  let pre = await ac;
  let res = await asyncWork(cr.params);
  let re = cr.conditionSync?.(pre, res);
  // if (is_dev) { } else { }
  return re;
}, Promise.resolve("0"));

function asyncWork(params: { key: string }) {
  return new Promise((res, rej) => {
    setTimeout(() => {
      res(params.key);
    }, 2000);
  });
}
async function Test() {
  let r = await serialApi;
  console.log("最终串行结果:", r);
}
Test();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值