: 아폴로는 API를 통해 오류가 두 종류의 노출 GraphQL 오류 로 응답의 일부로 반환됩니다, errors
와 함께, data
및 네트워크 오류 요청이 실패 할 때 발생합니다. 서버에 도달 할 수 없거나 응답 상태가 200 이외의 경우 네트워크 오류가 발생합니다. 응답 errors
에있는 쿼리 의 상태는 여전히 200입니다. 그러나 예를 들어 잘못된 쿼리는 Apollo Client의 400 상태 및 네트워크 오류
Apollo Client는 실제로 돌연변이 오류를 처리하는 네 가지 방법을 제공합니다.
1.) mutate
후크에 의해 리턴 된 함수를 호출하면 Promise가 리턴됩니다. 요청이 성공하면 약속합니다 해결 (가) 포함하는 응답 객체를 data
서버에서 반환. 요청이 실패하면 약속이 오류와 함께 거부 됩니다. 따라서 콘솔에 "처리되지 않은 거부"메시지가 표시됩니다. 거부 된 약속을 처리해야합니다.
login()
.then(({ data }) => {
// you can do something with the response here
})
.catch(e => {
// you can do something with the error here
})
또는 async / await 구문을 사용하십시오.
try {
const { data } = await login()
} catch (e) {
// do something with the error here
}
기본적으로 약속은 거부 하거나 GraphQL 오류 또는 네트워크 오류 합니다. 그러나 errorPolicy 를 ignore
또는 로 설정하면 all
Promise는 네트워크 오류에 대해서만 거부합니다. 이 경우 응답 개체를 통해 GraphQL 오류에 계속 액세스 할 수 있지만 약속은 해결됩니다.
2.) onError
기능 을 제공 할 때 위의 유일한 예외가 발생 합니다. 이 경우 약속은 거부하지 않고 항상 해결되지만 오류가 발생하면onError
하면 결과 오류와 함께 호출됩니다. 여기서 errorPolicy
설정 한 사항도 여기에 적용 onError
됩니다. 항상 네트워크 오류가 발생하지만 기본값 errorPolicy
인을 사용할 때 GraphQL 오류가 발생합니다 none
. 사용 onError
은 거부 된 약속을 잡는 것과 같습니다. 오류 처리기를 mutate
함수의 호출 사이트에서 후크의 호출 사이트로 이동합니다.
3.) 후크는 mutate
함수 외에도 useMutation
결과 객체를 반환합니다. 이 객체는 또한 돌연변이를 실행할 때 발생하는 모든 오류를 노출합니다. 위에서 쓴 오류 처리기 함수와 달리이 error
개체는 응용 프로그램 상태를 나타냅니다 . 둘 다error
data
이러한 방식으로 노출 된 개체 와 개체 편의상 존재합니다. 그들은 이것을하는 것과 같습니다 :
const [mutate] = useMutation(YOUR_MUTATION)
const [data, setData] = useState()
const [error, setError] = useState()
const handleClick = async () => {
try {
const { data } = await mutate()
setData(data)
catch (e) {
setError(e)
}
}
이와 같은 오류 상태를 갖는 것은 UI에 오류가 있음을 반영하도록하려는 경우 유용 할 수 있습니다. 예를 들어, 돌연변이가 오류없이 실행될 때까지 요소의 색상을 변경할 수 있습니다. 위의 상용구를 직접 작성하는 대신 제공된 결과 개체를 사용하면됩니다.
const [mutate, { data, error }] = useMutation(YOUR_MUTATION)
참고 : 노출 된 오류 상태를 사용하여 UI를 업데이트 할 수는 있지만 실제로 오류를 처리 하는 것 대신 사용할 수는 없습니다 . 당신 있어야 어느 쪽 제공 onError
콜백 또는 catch
처리되지 않은 약속 제거에 대한 경고를 방지하기 위해 오류를.
4.) 마지막으로 아폴로 링크 오류를 사용할 수도 있습니다 를 하여 요청에 대한 전역 오류 처리 를 추가 . 예를 들어 응용 프로그램에서 요청이 시작된 위치에 관계없이 오류 대화 상자를 표시 할 수 있습니다.
응용 프로그램에서 이러한 방법 중 어떤 방법을 사용 하려는지 (전역 대 로컬, 상태 대 콜백 등)에 크게 의존합니다. 대부분의 응용 프로그램은 둘 이상의 오류 처리 방법을 사용합니다.