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();
js异步串行
最新推荐文章于 2025-06-06 01:31:59 发布