自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 函数式的异步处理

假设我们有一系列需要调用的网络请求,有的并行,有点串行,有的需要处理异常,那么如何打造这样一条执行链呢?先模拟一些网络请求。let R= require('ramda');const getUser = (userId) => new Promise((resolve,reject) => { setTimeout(() => { r...

2019-08-18 13:08:29 556

原创 函数式编程对象--总结

maybe对象是可以不用的,异常值和错误处理可以使用相同的编程范式,使用一个高阶函数来处理分支逻辑,返回Either,然后使用composeK来组合调用我们举两个例子:1.排除异常值const R= require('ramda');const {Either} = require('ramda-fantasy')const {Right,Left} = Either;...

2019-08-01 12:05:39 263

原创 函数式编程对象-自定义容器(用函数组合二)

为了要收集错误,我们先实现一个新的容器对象,再尝试使用之前的Either容器。先看一下用新容器的实现(有点复杂)let R= require('ramda');const Success = (x) =>({ errors:[], chain: f => f(x), map: f => { let res = f(x); ...

2019-07-26 16:53:21 163

原创 函数式编程对象-自定义容器(用函数组合一)

上一篇是用链式调用的方式使用Either,这一次我们尝试用函数组合,我们先使用ramda库里的composeK方法,它用于组合返回容器对象的函数(自动调用容器的chain方法来执行函数)let R= require('ramda');//先实现一个最轻量的Eitherconst Right = x =>({ chain: f => f(x), ...

2019-07-26 14:39:02 170

原创 函数式编程对象-自定义容器

假使有人不幸看了我前面的函数式编程的文章,我感到非常抱歉。因为很可能他们和我一样陷入到了那些各种各样的实现了Moned的第三方库里了,这些库的实现五花八门,里面的方法功能相同但名称各异,而且其源码的可读性其差。在它们分出高下之前,我决定还是自己实现容器好了,这本身也不难。先来一个最轻量的Either:最规范的写法,Either中不做任何逻辑判断,需要返回Right还是Left取...

2019-07-08 16:41:12 175

原创 函数式编程对象IO

IO用来将不纯的函数变为纯的,它采取的方式呢,真的是不大高明甚至是有些粗暴的,就是“不调用”。也就是将函数视为“数据”。直到你扣动扳机的那一刻(调用runIo方法),函数才被执行。例:const R= require('ramda');const {IO} = require('ramda-fantasy');//一个要操作外部全局变量的非纯函数var globalVar =...

2019-06-26 18:35:23 384

原创 函数式编程对象Validation

Validation用于收集错误信息,Either会在遇到第一个错误后就返回了,而Validation会继续执行直到收集完所有的错误信息。Validation适用于需要收集表单的所有错误的情形。来看一下官方写法:const R= require('ramda');const {validation} = require('folktale');const {Suc...

2019-06-18 13:48:03 371

原创 函数式编程对象Maybe

Maybe被用来避免空值判断,将可能为空的值用Maybe容器包裹,目的还是打造一条没有分支可以顺序执行的方法链。假设我们有一串方法:const getList = R.path(['obj','value']);const formatProp = R.map(R.evolve({name:R.pipe(R.trim,R.toUpper)}));const sortList ...

2019-06-10 17:17:13 367 1

原创 函数式编程对象Either

首先JavaScript毕竟不是函数式语言,所以不必过分追求漂亮的函数式的实现。用到的库:ramda,ramda-fantasyconst R= require('ramda');const {Maybe,Either} = require('ramda-fantasy')Either是用来处理错误的管道,Right中的值将被继续传递,Left中的值将收集...

2019-06-09 17:46:44 659

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除