• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 基本形式
  2. 2. 异步函数

函数式进阶-管道

2023-01-19 22:09:39
总字数 425
预计阅读时间 1 分钟

管道处理是一种比较常见的api设计方式,意思是上一步的执行结果作为下一步的入参
顺序执行

如果我们需要在JS中实现这一点
当然可以这样做

1
func1(func2(func3(arg)))

首先这样代码很难看,其次是这样嵌套的代码调用是固定的,没有做到动态的函数式编程

基本形式

如果要实现一个管道,可以这样做

1
2
3
4
5
6
7
8
9
// pipe函数的参数接受若干个参数, 都是Function类型
const pipe = (...funcs) => {
// 这个pipe函数是会返回一个函数
return inputValue => { // 这个函数的初始入参作为第一个函数的调用入参, 之后将该函数返回值作为下一个函数的入参
return funcs.reduce((currentValue, currentFunction) => {
return currentFunction(currentValue)
}, inputValue)
}
}

上面是使用reduce作用是正序执行,如果要逆序执行可以使用reduceRight
调用示例

1
2
3
4
5
6
7
8
9
10
11
const func1 = value => {
return value * 10
}
const func2 = value => {
return value + 5
}
const func3 = value => {
return value * 0.5
}
const result = pipe(func1, func2, func3)(30)
console.log(result)

异步函数

如果输入的函数是异步的,或者同步异步都有呢
那么函数的返回结果就不能立刻拿到了

1
2
3
4
5
6
7
const pipeAsync = (...funcs) => {
return async (inputValue) => {
return funcs.reduce((chain, func) => {
return chain.then(func)
}, Promise.resolve(inputValue))
}
}

区别就是不管函数是不是异步的,都当做异步处理,作为then的回调函数
调用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const func4 = async value => {
return value * 10
}

const func5 = value => {
return value + 5
}

const func6 = async value => {
return value * 0.5
}

pipeAsync(func4, func5, func6)(30).then(result2 => {
console.log(result2)
})
  • JavaScript
  • 函数
  • JavaScript

扫一扫,分享到微信

CSS计数器 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆