Menggunakan contoh ini dari hasil dokumentasi menjadi memanggil fetch 2 kali (yang pertama berlangganan dan yang kedua di tautan http):
http://apollo-link-docs.netlify.com/docs/link/stateless.html
const reportErrors = (errorCallback) => new ApolloLink((operation, forward) => {
const observer = forward(operation);
// errors will be sent to the errorCallback
observer.subscribe({ error: errorCallback })
return observer;
});
//...
const createLinks = () =>
ApolloLink.from([
reportErrors(console.error),
httpLink,
]);
Ini berfungsi sebagaimana dimaksud sesuai dengan spesifikasi yang dapat diamati. Produser fn harus dipanggil pada panggilan berlangganan pertama. Tetapi tidak jelas apa cara yang tepat untuk menangani kesalahan dalam kombinasi dengan httpLink
?
Saya telah menggali sedikit ke dalam kode sumber dan ada metode seperti map
, reduce
dll tetapi tidak ada yang menerima panggilan balik kesalahan.
@valerybugakov lihat apollo-error-link
Tulis ini dengan httpLink Anda seperti ini:
import { ApolloClient } from 'apollo-client';
import { ApolloLink } from 'apollo-link';
import { createHttpLink } from 'apollo-link-http';
import { onError } from 'apollo-link-error';
import { InMemoryCache } from 'apollo-cache-inmemory';
const errorLink = onError(({ networkError, graphQLErrors }) => {
if (graphQLErrors) {
graphQLErrors.map(({ message, locations, path }) =>
console.log(
`[GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`,
),
);
}
if (networkError) console.log(`[Network error]: ${networkError}`);
});
const httpLink = createHttpLink({ ... });
const link = ApolloLink.from([
...otherLinksIfNeeded,
errorLink,
httpLink,
]);
const client = new ApolloClient({
link,
cache: new InMemoryCache(),
queryDeduplication: true,
});
@somehandle ya, itu pilihan. Bagaimana jika saya ingin menangani kesalahan pada tautan khusus saya? Saya menemukan satu-satunya cara untuk melakukannya adalah dengan membungkus Observable yang dikembalikan oleh next(operation)
ke Observable lain.
@valerybugakov jenis kesalahan apa yang ingin Anda tangani? Jika itu adalah Kesalahan Graphql, Anda dapat menggunakan .map
pada hasil forward(operation)
karena hasilnya dikembalikan, jika tidak, Anda perlu berlangganan pengamat lain. Lihatlah kode di balik apollo-link-error untuk beberapa contoh!
@jbaxleyiii
Bagaimana jika saya ingin menangkap kesalahan jaringan?
Katakanlah 400, permintaan buruk.
@coyolero Terkait https://github.com/apollographql/apollo-link/issues/570
Komentar yang paling membantu
@valerybugakov lihat apollo-error-link
Tulis ini dengan httpLink Anda seperti ini: