Nano Hash - криптовалюты, майнинг, программирование

scala playframework возвращает OK в flatMap

у меня есть следующая функция:

def createProcessTemplate: Action[AnyContent] = Action.async { implicit request =>
    println(request.body.asJson)
    request.body.asJson.map(_.validate[ProcessTemplatesModel] match {
      case JsSuccess(process, _) =>
        processTemplateDTO.createProcessTemplate(process).map {
          process => {

            // Create process steps templates
            createNewProcessStepTemplate(request, process.id.get)


            // Create prerequisites
            createProcessTemplatePrerequisite(request, process.id.get)

            // Create postConditions
            createProcessTemplatePostCondition(request, process.id.get)

            processTemplateDTO.getProcessStepTemplates(process.id.get).flatMap(
              steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps)))
          }
        }
      case JsError(_) =>
        Future.successful(BadRequest("Process Template not create client"))
      case _ => Future.successful(BadRequest("Process Template create client"))
    }).getOrElse(Future.successful(BadRequest("Process Template create client")))
  }

Я хочу вернуть шаги в заявлении Ok, но получил эту ошибку:

введите здесь описание изображения

в чем может быть проблема в этом случае?

Благодарность

07.08.2017

  • flatMap ожидает Future[T], но вы возвращаете только Ok. Попробуйте обернуть его в Future.successful 07.08.2017
  • вот так: processTemplateDTO.getProcessStepTemplates(process.id.get).flatMap( steps => Future.successful(Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps)))) 07.08.2017
  • получил ту же ошибку 07.08.2017
  • Что возвращают processTemplateDTO.createProcessTemplate(process) и processTemplateDTO.getProcessStepTemplates(process.id.get)? 07.08.2017
  • processTemplateDTO.createProcessTemplate(process) возвращает будущее[ProcessTemplatesModel] 07.08.2017
  • processTemplateDTO.getProcessStepTemplates(process.id.get) возвращает Future[Seq[ProcessStepTemplatesModel]] 07.08.2017

Ответы:


1

Попробуйте этот код:

def createProcessTemplate: Action[AnyContent] = Action.async { implicit request =>
println(request.body.asJson)
request.body.asJson.map(_.validate[ProcessTemplatesModel] match {
  case JsSuccess(process, _) =>
    processTemplateDTO.createProcessTemplate(process).flatMap {
      process => {

        // Create process steps templates
        createNewProcessStepTemplate(request, process.id.get)


        // Create prerequisites
        createProcessTemplatePrerequisite(request, process.id.get)

        // Create postConditions
        createProcessTemplatePostCondition(request, process.id.get)

        processTemplateDTO.getProcessStepTemplates(process.id.get).map(
          steps => Ok(Json.obj("id" -> process.id, "title" -> process.title, "steps" -> steps)))
      }
    }
  case JsError(_) =>
    Future.successful(BadRequest("Process Template not create client"))
  case _ => Future.successful(BadRequest("Process Template create client"))
}).getOrElse(Future.successful(BadRequest("Process Template create client")))

}

Я заменил map и flatMap, которые появляются вокруг вызовов, на методы processTemplateDTO. В первом вам нужно flatMap, потому что вы возвращаете Future, но во втором вам действительно нужно map, потому что вы возвращаете Result.

07.08.2017
  • Нет проблем :) Рад слышать, что помог. 07.08.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..