이해를 위해 실패한 미래를 처리하는 방법

Linde_98

나는 이해를 위해 다음이 있습니다. 내 데이터베이스에서 행을 삭제해야하지만 행이 존재하는 경우에만 (따라서 주어진 ID에 대한 뉴스가있는 경우) :

override def deleteNews(newsId: Long): Int = {
    val getAndDelete = for {
         Some(news) <- newsDao.get(newsId)// returns Future[Option[News]]
         delete <- newsDao.remove(news)   // returns Future[Int]
     } yield delete
     Await.result(getAndDelete, responseTimeout)
}

그러나 주어진 ID에 대한 요소가 없을 때 사건을 처리하는 방법을 모르겠습니다. 현재 다음 예외가 발생합니다.

Unexpected exception[NoSuchElementException: Future.filter predicate is not satisfied]

내 접근 방식이 끔찍하지 않기를 바랍니다 .D

저는 스칼라에 비교적 익숙하지 않습니다.

레비 램지

사용 Await은 그다지 좋은 생각이 아닙니다. 가능한 한 차단을 지연시키는 것이 가장 좋습니다.

IMO, 주어진 ID에 대한 요소가 실패해서는 안됩니다. 그 ID로 아무것도 없으면 newsDao.get성공적인 미래를 반환해야하며 None, newsDao.remove도움이된다면 존재하지 않는 ID를 호출해서는 안되며 , 전체 결과는 성공적으로 0 행을 삭제해야합니다. 계약은 deleteNews콜과 리턴 사이의 어느 시점에서 관련 행이 없다는 것을 보장하는 것입니다 newsId(물론 데이터 레이스를 둘러싼 약간의 손 흔들기 ...)).

따라서 newsDao의 구현을 변경할 수 없다고 가정합니다 .

val getFut: Future[Option[News]] =
  newsDao.get(newsId).recover {
    // can still fail for other reasons
    case _: NoSuchElementException => None
  }

// I really prefer map/flatMap directly vs. for-comprehension sugar, especially when dealing with multiple monadicish things

// Not the most succinct, but leaving meaningful names in for documentation
val getAndRemove =
  getFut.flatMap { newsOpt =>
    newsOpt.map { news =>
      newsDao.remove(news)
    }.getOrElse(Future.successful(0))
  }

여전히 deleteNewsbare를 반환 해야한다면 가끔 예외가 발생하고 이것이 아마도 차선책이라는 것을 받아 들일 Int수 있습니다 Await.result.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Imagenet 전처리를위한 TensorFlow 소스 코드를 이해하는 방법

분류에서Dev

XAP 처리 실패 ERROR 2002이 문제를 해결하는 방법

분류에서Dev

스칼라 패턴 : 미래를 낳는 이해를 위해 [A]

분류에서Dev

이해를 위해 다음 중첩 된 미래를 표현하는 방법

분류에서Dev

이해를위한 조건을 처리하는 스칼라 방식?

분류에서Dev

초기화 실패를 처리하는 적절한 방법

분류에서Dev

AOT 컴파일이 실패한 npm 패키지를 처리하는 방법

분류에서Dev

데이터 세트에서 태그 / 카테고리 / 클래스 수를 줄이기 위해 동일한 의미를 가진 단어를 식별하는 방법

분류에서Dev

다중 처리를 위해 코드를 조정하는 방법

분류에서Dev

EF에서 복제를 위해 rowguid를 처리하는 방법

분류에서Dev

자기 상관 문제를 해결하기 위해 1 차 차이 방법에 대한 이진 변수 처리

분류에서Dev

적절한 오류 처리를 위해 Java 메서드를 올바르게 리팩터링하는 방법

분류에서Dev

드래그 이벤트를 처리하기 위해 컴포넌트에 함수를 전달하는 방법

분류에서Dev

': app : compileFlutterBuildDebug'작업에 대한 실행 실패를 해결하는 방법

분류에서Dev

많은 파일이있는 디렉토리를 처리하기 위해 Unix 찾기 결과 수를 제한하는 방법

분류에서Dev

실행 파일을 지원하기 위해로드해야하는 패키지 또는 라이브러리를 결정하는 방법이 있습니까?

분류에서Dev

콜백 체인을 위해 jquery와 유사한 '성공'및 '실패'함수를 구현하는 방법

분류에서Dev

처리를위한 최소 라이브러리를 사용하여 왼쪽 및 오른쪽 채널에 대해 두 개의 FFT 개체를 만드는 방법

분류에서Dev

Flutter 앱 빌드 실패를 해결하는 방법 ( ': app : mergeDebugResources'작업에 대한 실행 실패)?

분류에서Dev

이진 트리 인쇄를위한 재귀 방법 이해

분류에서Dev

Unet 아키텍처 PyTorch에서 이상한 해상도를 처리하는 방법

분류에서Dev

처리를 위해 하위 디렉토리 및 파일의 이름을 결합하는 방법-Python

분류에서Dev

배포 생성을 위해 이미지의 출처를 참조하는 방법

분류에서Dev

미완성 사용자 스토리를 위해 git에서 분기를 처리하는 방법에 대한 제안

분류에서Dev

RabbitMq로 실패한 게시를 처리하는 방법은 무엇입니까?

분류에서Dev

데비안 패키지 : 활성화하기 위해 bashrc에 콘텐츠를 추가해야하는 설치를 처리하는 방법은 무엇입니까?

분류에서Dev

간단한 루프를 위해 AVX 계산 처리량에 도달하는 방법

분류에서Dev

정적 페이지에서 PHP를 실행하기위한 해결 방법?

분류에서Dev

목록 이해력 정리를위한 정리 방법

Related 관련 기사

  1. 1

    Imagenet 전처리를위한 TensorFlow 소스 코드를 이해하는 방법

  2. 2

    XAP 처리 실패 ERROR 2002이 문제를 해결하는 방법

  3. 3

    스칼라 패턴 : 미래를 낳는 이해를 위해 [A]

  4. 4

    이해를 위해 다음 중첩 된 미래를 표현하는 방법

  5. 5

    이해를위한 조건을 처리하는 스칼라 방식?

  6. 6

    초기화 실패를 처리하는 적절한 방법

  7. 7

    AOT 컴파일이 실패한 npm 패키지를 처리하는 방법

  8. 8

    데이터 세트에서 태그 / 카테고리 / 클래스 수를 줄이기 위해 동일한 의미를 가진 단어를 식별하는 방법

  9. 9

    다중 처리를 위해 코드를 조정하는 방법

  10. 10

    EF에서 복제를 위해 rowguid를 처리하는 방법

  11. 11

    자기 상관 문제를 해결하기 위해 1 차 차이 방법에 대한 이진 변수 처리

  12. 12

    적절한 오류 처리를 위해 Java 메서드를 올바르게 리팩터링하는 방법

  13. 13

    드래그 이벤트를 처리하기 위해 컴포넌트에 함수를 전달하는 방법

  14. 14

    ': app : compileFlutterBuildDebug'작업에 대한 실행 실패를 해결하는 방법

  15. 15

    많은 파일이있는 디렉토리를 처리하기 위해 Unix 찾기 결과 수를 제한하는 방법

  16. 16

    실행 파일을 지원하기 위해로드해야하는 패키지 또는 라이브러리를 결정하는 방법이 있습니까?

  17. 17

    콜백 체인을 위해 jquery와 유사한 '성공'및 '실패'함수를 구현하는 방법

  18. 18

    처리를위한 최소 라이브러리를 사용하여 왼쪽 및 오른쪽 채널에 대해 두 개의 FFT 개체를 만드는 방법

  19. 19

    Flutter 앱 빌드 실패를 해결하는 방법 ( ': app : mergeDebugResources'작업에 대한 실행 실패)?

  20. 20

    이진 트리 인쇄를위한 재귀 방법 이해

  21. 21

    Unet 아키텍처 PyTorch에서 이상한 해상도를 처리하는 방법

  22. 22

    처리를 위해 하위 디렉토리 및 파일의 이름을 결합하는 방법-Python

  23. 23

    배포 생성을 위해 이미지의 출처를 참조하는 방법

  24. 24

    미완성 사용자 스토리를 위해 git에서 분기를 처리하는 방법에 대한 제안

  25. 25

    RabbitMq로 실패한 게시를 처리하는 방법은 무엇입니까?

  26. 26

    데비안 패키지 : 활성화하기 위해 bashrc에 콘텐츠를 추가해야하는 설치를 처리하는 방법은 무엇입니까?

  27. 27

    간단한 루프를 위해 AVX 계산 처리량에 도달하는 방법

  28. 28

    정적 페이지에서 PHP를 실행하기위한 해결 방법?

  29. 29

    목록 이해력 정리를위한 정리 방법

뜨겁다태그

보관