2024Web04—JS设计管道函数
本文最后更新于377 天前,其中的信息可能已经过时,如有错误请发送邮件到1986413837@qq.com

需要设计一个 Pipeline 管道函数,用于控制 360 度展示产品的动画序列,通过管道连接各个动画步骤,使产品以流畅的方式呈现给用户 效果如下

封装一个支持异步的 pipeline 管道函数,能够按顺序执行一系列异步操作,每个异步操作的结果将作为下一个异步操作的输入

待补充部分

initalValue:初始值,作为第一个任务的输入

sequence:一个包含异步函数(或返回 Promise 的函数)的数组

解决思路

(1)初始化参数

let param = initialValue

(2)创建Promise

return new Promise(async (res, rej) => { ... });

(3)遍历任务数组

for (let i = 0; i < sequence.length; i++) {
    param = await sequence[i](param);
}
  • 循环执行:依次遍历 sequence 中的每个函数。
    • sequence[i](param):调用当前任务函数,传入前一个任务的输出值 param
    • await:等待当前任务完成(如果是异步任务),获取其返回值。
    • 更新 param:将当前任务的返回值赋给 param,供下一个任务使用。

(4)返回最终结果

res(param)

 关键点

  1. 顺序执行
    任务严格按数组顺序执行,前一个任务完成后才会开始下一个任务。
  2. 异步支持
    每个任务可以是同步函数或返回 Promise 的异步函数,通过 await 统一处理。
  3. 错误处理
    • 当前代码中,如果某个任务抛出错误,会直接导致 Promise 被拒绝(reject),但未显式捕获错误。
    • 改进建议:在 await 外包裹 try-catch,显式调用 rej(error)
  4. 参数传递
    每个任务的输出值会作为下一个任务的输入值(类似管道操作)

示例流程

const task1 = (x) => Promise.resolve(x + 1);
const task2 = (x) => Promise.resolve(x * 2);
const task3 = (x) => x - 3;

pipeline(5, [task1, task2, task3])
    .then(result => console.log(result)); // 输出: 9

执行步骤:

  1. 初始值 param = 5
  2. 执行 task1(5) → 返回 6,更新 param = 6
  3. 执行 task2(6) → 返回 12,更新 param = 12
  4. 执行 task3(12) → 返回 9,更新 param = 9
  5. 解析 Promise,最终结果 9

最终代码

const pipeline =(initialValue, sequence) => {
    // TODO: 待补充代码
    let param = initialValue
    return new Promise(async (res, rej)=>
    {
        for(let i = 0; i < sequence.length; i++)
        {
            param = await sequence[i](param)
        }
        res(param)
    })
   
};

代码优化 由于内部已是 async 函数,可直接返回 param,无需 new Promise

const pipeline = async (initialValue, sequence) => {
    let param = initialValue;
    for (const task of sequence) {
        param = await task(param);
    }
    return param;
};
Life's a struggle, I'll conquer it.
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇