fp-ts在mapLeft内部调用异步函数

时间:2020-05-28 13:10:15

标签: typescript asynchronous error-handling functional-programming fp-ts

我是fp-ts的新手,请帮助我解决问题: 我需要使用异步功能在不同级别上多次记录同一错误。这是我的示例代码:

const myProgram = pipe(
    tryCatch(() => someAsyncFunc(), toError),
    mapLeft(async (err1) => {
        await loggerAsyncFunc();
        return err1;
    }),
)

const main = pipe(
    myProgram,
    mapLeft((err2) => {
        // err2 is a pending promise :(
    })
)();

我正在使用mapLeft来执行此操作,但是它不起作用。 我需要怎么做才能在err2中拥有错误的值(err1),而不是未决的诺言?

1 个答案:

答案 0 :(得分:1)

假设您正在使用TaskEither,否则Else可以在左侧链接Task。

1-1 [
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '4',
    is_submit: 0,
    is_intime: 0,
    noSubmit: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '8',
    is_submit: 1,
    is_intime: 0,
    late: 1
  },
  {
    t_class_id: 1,
    t_class_subject_id: 1,
    t_class_task_id: 1,
    title: 'Mengerjakan Soal',
    sec_user_id: '3,5,7',
    is_submit: 1,
    is_intime: 1,
    onTime: 3
  }
]
2-2 [...]
3-4 [...]