Búsqueda de sitios web

typescript - fp-ts Usando función async en medio de un pipe


Tengo 3 funciones, f1, f2, f3.

f1 y f3 son síncronas y devuelven Option<string> pero f2 es una función asíncrona que devuelve Promise<Option<string>>.

¿Cómo debería usar estas tres funciones en una sola tubería?

Aquí está mi código:

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

Respuesta #1

Encontré una solución usando TaskOption

Aquí está mi código:

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

Convertimos todos los Options en TaskOptions usando TO.fromOption.

Artículos relacionados