发送带有一组错误的变量的突变(在这种情况下是故意的)会导致在控制台中引发错误,并且apollo-link-error链接无法识别错误。此外,突变加载状态会卡在“加载”状态,而不会出现错误对象。
通过调试会话,我发现禅宗可观察到的全局错误处理拾取了错误链接的“ next”函数中引发的错误,因为未定义“结果”
将可观察的内容包装在尝试捕获中的阿波罗链接错误代码,但此处底部的捕获不是if (result.errors)
抛出“空指针”时被捕获的捕获,因为导致未定义
try {
sub = forward(operation).subscribe({
next: function (result) {
// result is undefined, throwing an error
if (result.errors) {
retriedResult = errorHandler({
graphQLErrors: result.errors,
response: result,
operation: operation,
forward: forward,
});
if (retriedResult) {
retriedSub = retriedResult.subscribe({
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer),
});
return;
}
}
observer.next(result);
},
error: function (networkError) {
retriedResult = errorHandler({
operation: operation,
networkError: networkError,
graphQLErrors: networkError &&
networkError.result &&
networkError.result.errors,
forward: forward,
});
if (retriedResult) {
retriedSub = retriedResult.subscribe({
next: observer.next.bind(observer),
error: observer.error.bind(observer),
complete: observer.complete.bind(observer),
});
return;
}
observer.error(networkError);
},
complete: function () {
if (!retriedResult) {
observer.complete.bind(observer)();
}
},
});
} // the error is NOT caught here
catch (e) {
errorHandler({ networkError: e, operation: operation, forward: forward });
observer.error(e);
}
```
Link definition:
```javascript
export const client = new ApolloClient({
link: ApolloLink.from([
onError((errors) => {
console.log('errors in link!', errors);
handleServerError(errors);
}),
new MeteorAccountsLink(),
new HttpLink({
uri: '/graphql',
}),
]),
cache: new InMemoryCache(),
});
编辑:
浏览器中的请求的确显示了一个错误对象,其错误对象的形状为{errors: [{..}]}
的graphQlErro,这很奇怪,因为它没有进入链接的“结果”。
编辑2:
看来Meteor正在捡起上面发布的错误之前在http链接中引发的错误,这可能就是未定义“结果”的原因。编写自定义链接以填充缺少的“结果”,因此该应用程序至少可以正常工作。
答案 0 :(得分:1)
流星吞没错误似乎是一个问题。修复了使polyfill链接至少不破坏突变完成功能中的js并显示一般错误的问题。
const stupidMeteorErorrPolyfill = new ApolloLink((operation, forward) => forward(operation).map(data => data || { errors: [{ message: '! Empty response in gql links, see graphql.js and network tab' }] }));