我有三个函数,f1,f2,f3。
f1和f3是同步并返回Option<string>的,但是f2是一个异步函数返回Promise<Option<string>>。
我应该如何在一个管道中使用这三个函数?
这是我的代码:
import {some, chain} from 'fp-ts/lib/Option';
import {pipe} from 'fp-ts/lib/pipeable';
const f1 = (input: string) => {
return some(input + " f1")
};
const f2 = async (input: string) => {
return some(input + " f2")
};
const f3 = (input: string) => {
return some(input + " f3");
};
const result = pipe(
"X",
f1,
chain(f2),
chain(f3),
);
console.log("result", result);发布于 2020-01-02 06:37:56
我找到了一个使用TaskOption的解决方案
这是我的代码:
import * as O from 'fp-ts/lib/Option';
import * as TO from 'fp-ts-contrib/lib/TaskOption';
import {pipe} from 'fp-ts/lib/pipeable';
import {flow} from 'fp-ts/lib/function';
const f1 = (input: string): O.Option<string> => {
return O.some(input + " f1")
};
const f2 = (input: string): TO.TaskOption<string> => async () => {
return O.some(input + " f2")
};
const f3 = (input: string): O.Option<string> => {
return O.some(input + " f3");
};
pipe(
"X",
flow(f1, TO.fromOption),
TO.chain(f2),
TO.chain(flow(f3,TO.fromOption)),
)().then(console.log);我们使用Option将所有的TaskOption转换为TO.fromOption。
https://stackoverflow.com/questions/59526500
复制相似问题