Что такое способ реализации структуры Scala `Either [A, B]` в Koa / Javascript - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть несколько проектов с 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 /апи / 2.12.0 / Скала / Util / Either.html

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

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

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 и т. Д.

0 голосов
/ 25 февраля 2019

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

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

...