Связь между бэкендом http4s и интерфейсом Binding.scala

Я пытаюсь использовать Binding.scala с существующим бэкенд-сервисом http4s, но потерялся в том, как они будут сочетаться друг с другом. Я не уверен, как "связать", скажем, FS2 Task или кошки-эффект IO с Binding.scala.

1 ответ

Я никогда не использовал http4s, но подсказка может заключаться в использовании FutureBinding.

Пока вы получаете будущее, вы можете использовать его довольно красиво:

Вот мой пример для вызова асинхронного веб-сервиса (ajax-call):

  @dom def afClients(): Binding[HTMLElement] = {
    val apiPath = s"/calendar/afClients"

    FutureBinding(Ajax.get(apiPath))
      .bind match {
      case None =>
        <div class="ui active inverted dimmer front">
          <div class="ui large text loader">Loading</div>
        </div>
      case Some(Success(response)) =>
        val json = Json.parse(response.responseText)
        info(s"Json received List[AFClientConfig]: ${json.toString().take(20)}")
        json.validate[List[AFClientConfig]] match {
          case JsSuccess(u, _) =>
            changeAFClients(u)
            <div>
            </div>
          case JsError(errors) =>
            <div>
              {s"Problem parsing User: ${errors.map(e => s"${e._1} -> ${e._2}")}"}
            </div>
        }

      case Some(Failure(exception)) =>
        error(exception, s"Problem accessing $apiPath")
        <div>
          {exception.getMessage}
        </div>
    }
  }
Другие вопросы по тегам