我现在正在学习fp-ts
,并尝试用它的方法替换我的API的某些部分。
简单举例:
- 使用请求获取
itemId
- 使用此
itemId
和async函数来获取(或不获取)项目
我找到的唯一办法是:
const itemId: E.Either<string, Item["id"]> = pipe(
body.itemId,
E.fromNullable('Item ID is missed')
);
const item: E.Either<string, Item> = E.isLeft(itemId)
? itemId
: pipe(
await getItem(itemId.right),
E.fromNullable('cant find item')
);
它可以工作。但是它的方式正确吗?它有没有办法在一个pipe
函数中完成这一切?谢谢。
1条答案
按热度按时间whlutmcx1#
这个问题有几个层次,所以我将提出一个可能的解决方案,并介绍它是如何工作的。
首先,
fp-ts
使用Task
来表示异步工作,因此在fp-ts
中使用异步代码时,大多数情况下您首先将代码转换为Task
或TaskEither
(稍后会详细介绍)。首先,我们需要一个函数来执行getItem
任务,并且在返回null时返回Either
而不是null
。现在我们有了一个函数,它接受一个数字并产生一个
TaskEither
,它将获取该项目。接下来,我们要对
body
对象使用这个函数,可以将新创建的函数与body
沿着使用来获取一个项:最后,您可以对该值执行一些操作,如下所示: