发送带有一组错误的变量的突变(在这种情况下是故意的)会导致在控制台中引发错误,并且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,});
if (retriedResult) {
retriedSub = retriedResult.subscribe({
next: observer.next.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,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链接中引发的错误,这可能就是未定义“结果”的原因。编写自定义链接以填充缺少的“结果”,因此该应用程序至少可以正常工作。