Что такое способ реализации структуры 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