Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 在管道中间使用异步函数的fp ts_Typescript_Asynchronous_Functional Programming_Pipe_Fp Ts - Fatal编程技术网

Typescript 在管道中间使用异步函数的fp ts

Typescript 在管道中间使用异步函数的fp ts,typescript,asynchronous,functional-programming,pipe,fp-ts,Typescript,Asynchronous,Functional Programming,Pipe,Fp Ts,我有3个函数,f1,f2,f3 f1和f3是同步和返回选项,但f2是异步函数返回Promise 我应该如何在单个管道中使用这三个函数 这是我的密码: 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 (

我有3个函数,
f1
f2
f3

f1
f3
是同步和返回
选项
,但
f2
是异步函数返回
Promise

我应该如何在单个管道中使用这三个函数

这是我的密码:

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);
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);

我使用
TaskOption

这是我的密码:

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);
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);
从'fp ts/lib/Option'以O的形式导入*;
从“fp ts contrib/lib/TaskOption”导入*;
从'fp ts/lib/pipeable'导入{pipe};
从'fp ts/lib/function'导入{flow};
常量f1=(输入:字符串):O.选项=>{
返回O.some(输入+“f1”)
};
常量f2=(输入:字符串):TO.TaskOption=>async()=>{
返回O.some(输入+“f2”)
};
常量f3=(输入:字符串):O.选项=>{
返回O.some(输入+f3);
};
烟斗(
“X”,
流量(f1,至.fromOption),
到。链(f2),
TO.chain(流(f3,TO.fromOption)),
)()然后(console.log);

我们使用
to.fromOption

将所有
选项
s转换为
任务选项
s。您有两个嵌套效果(异步和可选),因此需要组合两个单子。因为单子不能机械地作曲,所以你必须使用单子变形金刚。我确信FP-TS提供了
option
。是的,FP-TS中有
option
,但我不知道该如何使用它。您能告诉我如何在上述示例代码中使用
option
?谢谢,我不知道有什么问题。非常有趣。请阅读它的文档并帮助我解决我的问题