Что такое способ реализации структуры Scala `Either[A,B]` в Koa / Javascript

У меня есть несколько проектов с Play Scala, и я нашел весьма полезным использовать Scala Either[A, B] построить в моделях так, чтобы в моем контроллере у меня было что-то вроде (в качестве примера)

val modelResult:Either[String, String] = ...

modelResult match {
  case Left(a) => Ok(... do something here that is meant for a 200 ....)
  case Right(err) => BadRequest(display an error in a 400)
}

что было бы хорошим способом сделать что-то подобное в Javascript (я использую фреймворк Koa)

Для тех, кто не знаком с Either построить https://www.scala-lang.org/api/2.12.0/scala/util/Either.html

2 ответа

Как насчет этого?

class Either {}

class Left extends Either {
    constructor(leftValue) {
        super()
        this.leftValue = leftValue;
    }

    match(lHandler, unused) {
        return lHandler(this.leftValue);
    }
}

class Right extends Either {
    constructor(rightValue) {
        super()
        this.rightValue = rightValue;
    }

    match(unused, rHandler) {
        return rHandler(this.rightValue);
    }
}

Использование:

const either = ... // e.g. new Left('Test');
either.match(
    left => console.log(left),
    right => console.warn('An error occurred'),
);

Чтобы сделать это действительно полезным, я предлагаю добавить map, flatMap, так далее.

Взгляните на одну из множества библиотек FP для JavaScript. Rambda является популярным (см. Также документы /#). Вы также можете взглянуть на Daggy для моделирования сопутствующих товаров.

Мышление в Rambda дает хорошее представление о Rambda

Другие вопросы по тегам