如何打断,退出撰写或管道?

时间:2016-07-29 16:13:10

标签: functional-programming ramda.js

中断一长串撰写或管道功能的正确方法是什么?

假设链不需要在第二个函数之后运行,因为它找到了一个无效值,只要用户提交的值无效就不需要继续接下来的5个函数。

你是否返回一个undefined / empty参数,所以其余的函数只检查是否没有返回值,在这种情况下只是继续传递空参数?

2 个答案:

答案 0 :(得分:3)

我认为没有一种通用的方法来解决这个问题。

通常在使用algebraic data types时,会定义一些内容,以便即使您不喜欢的数据不存在也可以继续运行。这是类型的一个非常有用的功能,例如[Route("foo/bar/{id:int}")] IHttpActionResult SameRouteAsAbove ( int id ) { // ... } Maybe

但大多数版本的Either或相关函数都没有为您提供早期转义机制。拉姆达当然没有。

答案 1 :(得分:1)

虽然从技术上讲您不能退出管道,但是可以在管道内使用pipe(),因此没有理由您不能执行以下操作来“退出”(从管道返回或踢入另一个管道) :

pipe(
  // ... your pipeline 
  propOr(undefined, 'foo'), // - where your value is missing
  ifElse(isNil, always(undefined), pipe(
    // ...the rest of your pipeline
  ))
)