: Apollo onun API üzerinden hatalar iki tür ortaya GraphQL hatalar olarak yanıtın bir parçası olarak iade edilir, errors
yanında, data
ve ağ hataları bir isteği başarısız olduğunda meydana gelir. Bir sunucuya erişilemediğinde veya yanıt durumu 200 dışında bir şey olduğunda bir ağ hatası oluşur - errors
yanıtta bulunan sorguların durumu hala 200 olabilir. Ancak, geçersiz bir sorgu, örneğin, Apollo İstemcisinde 400 durumu ve ağ hatası.
Apollo Client aslında mutasyon hatalarını ele almak için dört farklı yol sunar:
1.) Çağanoz mutate
tarafından döndürülen fonksiyonun çağrılması bir Söz verir. İstek başarılı olursa Promise , sunucu tarafından döndürülen bir yanıt nesnesine çözümlenecektirdata
. İstek başarısız olursa, Promise hatayla reddedilir . Bu yüzden konsolda bir "İşlenmemiş Reddetme" mesajı görüyorsunuz - reddedilen Sözü yerine getirmeniz gerekiyor.
login()
.then(({ data }) => {
// you can do something with the response here
})
.catch(e => {
// you can do something with the error here
})
veya eşzamansız / bekliyor sözdizimi ile:
try {
const { data } = await login()
} catch (e) {
// do something with the error here
}
Varsayılan olarak, Promise üzerinde reddedecektir ya GraphQL hataları veya ağ hataları. Ayarlayarak errorPolicy için ignore
ya all
da, Promise olacak sadece ağ hatalarında reddediyoruz. Bu durumda, GraphQL hatalarına yanıt nesnesi aracılığıyla erişilebilecek, ancak Promise çözümlenecektir.
2.) Yukarıdakilerin tek istisnası, bir onError
işlev sağladığınızda gerçekleşir . Bu durumda, Promise reddetmek yerine her zaman çözülür, ancak bir hata oluşursa, onError
ortaya çıkan hatayla çağrılır. errorPolicy
- Belirlediğiniz burada da geçerlidir onError
daima ağ hataları için çağrılır ancak varsayılan kullanırken sadece GraphQL hatalarla adı verilecek errorPolicy
ait none
. Kullanmak onError
, reddedilen Sözü yakalamakla eşdeğerdir - sadece hata işleyicisini mutate
işlevin çağrı sitesinden çağrının çağrı sitesine taşır .
3.) Bu mutate
işleve ek olarak , useMutation
kanca ayrıca bir sonuç nesnesi döndürür. Bu nesne, mutasyon çalıştırılırken karşılaşılan hataları da ortaya çıkarır. Yukarıda yazdığımız hata işleyici işlevlerinin aksine, bu error
nesne uygulama durumunu temsil eder . Bu şekilde açığa çıkarılan error
hem data
nesneler hem de nesneler kolaylık sağlar. Bunu yapmakla eşdeğerdirler :
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)
}
}
Böyle bir hata durumuna sahip olmak, kullanıcı arayüzünüzün bir hata olduğunu yansıtmasını istediğinizde yararlı olabilir. Örneğin, mutasyon hatasız çalışana kadar bir öğenin rengini değiştirebilirsiniz. Yukarıdaki kazan plakasını kendiniz yazmak yerine, sadece sağlanan sonuç nesnesini kullanabilirsiniz.
const [mutate, { data, error }] = useMutation(YOUR_MUTATION)
NOT: Eğer UI güncelleştirmek maruz hata durumunu kullanabilirsiniz, bunu yaparken olduğu değil aslında yerini taşıma hatası. Sen gerekir ya bir sağlamak onError
geri arama veya catch
işlenmeyen bir Promise ret hakkında uyarılar önlemek için hatayı.
4.) Son olarak, istekleriniz için genel hata işleme eklemek için apollo-link-error komutunu da kullanabilirsiniz . Bu, örneğin, isteğinizin nereden kaynaklandığına bakılmaksızın bir hata iletişim kutusu görüntülemenize olanak tanır.
Bu yöntemlerden hangisini uygulamanızda kullandığınız, ağırlıklı olarak ne yapmaya çalıştığınıza bağlıdır (global vs local, state vs callback vb.). Çoğu uygulama, birden fazla hata işleme yönteminden yararlanır.