Apollo链接错误未捕获Apollo网络(错误请求)错误

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

nimadedajibamaochuiz 回答:Apollo链接错误未捕获Apollo网络(错误请求)错误

流星吞没错误似乎是一个问题。修复了使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' }] }));

本文链接:https://www.f2er.com/3163926.html

大家都在问