原始函数
注入的切片函数
新函数
AOP增强之向后切片并透传返回值
脚本举例
import { afterReturn } from '@tomato-js/function'
let origin = (str) => str;
const target = (str) => console.log(str);
origin = afterReturn(origin, target);
origin('current');//current
原始函数
注入的切片函数
新函数
AOP增强底层函数
脚本举例
import { aop } from '@tomato-js/function'
let origin = (str) => console.log(str);
const target = ({args,value}) => console.log('around');
origin = aop(origin, target,'around');
origin('current');//around current around
原始函数
注入的切片函数
切片方案,支持after/before/around/afterReturn
新函数
AOP增强之前后切片
脚本举例
import { around } from '@tomato-js/function'
let origin = (str) => console.log(str);
const target = ({args,value}) => console.log('around');
origin = around(origin, target);
origin('current');//around current around
原始函数
注入的切片函数
新函数
AOP增强之向前切片
脚本举例
import { before } from '@tomato-js/function'
let origin = (str) => console.log(str);
const target = ({args,value}) => console.log('before');
origin = before(origin, target);
origin('current');//before current
原始函数
注入的切片函数
新函数
both增强函数,相当于函数&&
新增于v0.0.12
脚本举例
import { both } from '@tomato-js/function'
function isOver18(){};
function isCitizen(){};
const isEligibleToVote = both(isOver18,isCitizen);
isEligibleToVote();
多个条件函数
新函数
compose增强函数,相当于f(g(x)),从右到左
新增于v0.0.12
脚本举例
import { compose } from '@tomato-js/function'
const step1 = (x: number) => (x ? 1 : 2);
const step2 = (x: number) => (x === 1 ? 3 : 4);
const step3 = (x: number) => (x === 3 ? 5 : 6);
const getResult = compose(step3, step2, step1);
const result = getResult(1);//5
多个函数
新函数
curry增强函数
新增于v0.0.12
脚本举例
import { curry } from '@tomato-js/function'
function compute(a, b, c, d) {
return (a + b * c) / d;
} // f(12, 3, 6, 2) == 15
const f = curry(compute);
const g = f(12);
const result = g(3, 6, 2);//15
需要增强的函数
参数列表
新函数
函数防抖
新增于v0.0.17
脚本举例
import { debounce } from '@tomato-js/function'
debounce(() => console.log('debounce'), 1000, { isImmediate: true });
调用函数
延迟执行毫秒数
是否立即执行,true 表立即执行,false 表非立即执行
新函数
either增强函数,相当于函数||
新增于v0.0.12
脚本举例
import { either } from '@tomato-js/function'
function isOver18(){};
function isCitizen(){};
const isEligibleToVote = either(isOver18,isCitizen);
isEligibleToVote()
多个条件函数
新函数
flip增强函数参数反转
新增于v0.0.12
脚本举例
import { flip } from '@tomato-js/function'
const f = function(a: string, b: string, c: string) {
return a + " " + b + " " + c;
};
const g = flip(f);
const result = g("a", "b", "c");//c b a
需要增强的函数
新函数
反转函数逻辑,返回新函数。之前返回true的情况,新函数会返回false
脚本举例
import { inverse } from '@tomato-js/function'
const isTrue = ()=>true;
const isFalse = inverse(isTrue);
isTrue()//true
isFalse()//false
需要逻辑反转的函数
新函数
控制函数执行一次
新增于v0.0.12
脚本举例
import { once } from '@tomato-js/function'
const isTrue = ()=>conosle.log('true');
const onceExec = once(isTrue);
onceExec()//true
onceExec()
只需执行一次的函数
新函数
partial增强函数偏函数,固定前置参数返回新函数
新增于v0.0.12
脚本举例
import { partial } from '@tomato-js/function'
function compute(a: number, b: number, c: number, d: number) {
return (a + b * c) / d;
} // f(12, 3, 6, 2) == 15
const f = partial(compute,[12,3]);
const result = f(6,2);//15
需要增强的函数
固定前置参数数组
新函数
partialRight增强函数偏函数,固定后置参数返回新函数
新增于v0.0.12
脚本举例
import { partialRight } from '@tomato-js/function'
function compute(a: number, b: number, c: number, d: number) {
return (a + b * c) / d;
} // f(12, 3, 6, 2) == 15
const f = partialRight(compute,[6,2]);
const result = f(12,3);//15
需要增强的函数
固定前置参数数组
新函数
pipe增强函数,相当于f(g(x)),从左到右
新增于v0.0.12
脚本举例
import { pipe } from '@tomato-js/function'
const step1 = (x: number) => (x ? 1 : 2);
const step2 = (x: number) => (x === 1 ? 3 : 4);
const step3 = (x: number) => (x === 3 ? 5 : 6);
const getResult = pipe(step1, step2, step3);
const result = getResult(1);//5
多个函数
新函数
轮询方法,支持同步和异步
新增于v0.0.16
脚本举例
import { poll } from '@tomato-js/function'
const { poller, cancel } = poll({
fn: getUser,
validate: v => v.result === true,
interval: 1000,
maxAttempts: 20
});
//手动取消轮询
setTimeout(() => cancel(), 7000);
//满足validate后的fn后续回调
poller.then(data => {
console.log('poller done')
console.log(data);
});
轮询函数
间隔时间,默认1000毫秒
最大尝试次数,默认10次
验证函数,true则返回resolve
轮询对象,提供轮询Promise和cancel取消轮询方法
输出函数耗时
脚本举例
import { takeTime } from '@tomato-js/function'
takeTime(() => Math.pow(2, 10));
需要统计的函数
耗时
函数节流
新增于v0.0.17
脚本举例
import { throttle } from '@tomato-js/function'
throttle(() => console.log('throttle'), 1000, { isImmediate: true });
调用函数
延迟执行毫秒数
新函数
执行多次
脚本举例
import { times } from '@tomato-js/function'
times(5,() => Math.pow(2, 10));
执行次数
需要执行的函数
作用域指向
耗时
Generated using TypeDoc
AOP增强之向后切片
脚本举例
import { after } from '@tomato-js/function' let origin = (str) => console.log(str); const target = ({args,value}) => console.log('after'); origin = after(origin, target); origin('current');//current after