當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript apollo-link.Operation類代碼示例

本文整理匯總了TypeScript中apollo-link.Operation的典型用法代碼示例。如果您正苦於以下問題:TypeScript Operation類的具體用法?TypeScript Operation怎麽用?TypeScript Operation使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


在下文中一共展示了Operation類的8個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: it

  it('should correctly batch multiple queries', done => {
    const data = {
      lastName: 'Ever',
      firstName: 'Greatest',
    };
    const data2 = {
      lastName: 'Hauser',
      firstName: 'Evans',
    };
    const batcher = new OperationBatcher({
      batchInterval: 10,
      batchHandler: () =>
        new Observable(observer => {
          observer.next([{ data }, { data: data2 }, { data }]);
          setTimeout(observer.complete.bind(observer));
        }),
    });
    const query = gql`
      query {
        author {
          firstName
          lastName
        }
      }
    `;
    const operation: Operation = createOperation({}, { query });
    const operation2: Operation = createOperation({}, { query });
    const operation3: Operation = createOperation({}, { query });

    batcher.enqueueRequest({ operation }).subscribe({});
    batcher.enqueueRequest({ operation: operation2 }).subscribe({});
    try {
      expect(batcher.queuedRequests.get('').length).toBe(2);
    } catch (e) {
      done.fail(e);
    }

    setTimeout(() => {
      // The batch shouldn't be fired yet, so we can add one more request.
      batcher.enqueueRequest({ operation: operation3 }).subscribe({});
      try {
        expect(batcher.queuedRequests.get('').length).toBe(3);
      } catch (e) {
        done.fail(e);
      }
    }, 5);

    setTimeout(
      terminatingCheck(done, () => {
        // The batch should've been fired by now.
        expect(operation.getContext()).toEqual({ response: { data } });
        expect(operation2.getContext()).toEqual({ response: { data: data2 } });
        expect(operation3.getContext()).toEqual({ response: { data } });
        expect(batcher.queuedRequests.get('')).toBeUndefined();
      }),
      20,
    );
  });
開發者ID:SET001,項目名稱:apollo-link,代碼行數:58,代碼來源:batchLink.ts

示例2: ApolloLink

const authMiddleware = new ApolloLink((operation: Operation, forward: any) => {
  operation.setContext({
    headers: {
      "X-JWT": getToken()
    }
  });
  return forward(operation);
});
開發者ID:piann,項目名稱:weber-client,代碼行數:8,代碼來源:apollo.ts

示例3: selectURI

      ((operation: Operation) => {
        const context = operation.getContext();

        const contextConfig = {
          http: context.http,
          options: context.fetchOptions,
          credentials: context.credentials,
          headers: context.headers,
        };

        //may throw error if config not serializable
        return selectURI(operation, uri) + JSON.stringify(contextConfig);
      });
開發者ID:SET001,項目名稱:apollo-link,代碼行數:13,代碼來源:batchHttpLink.ts

示例4: request

    public request(
      operation: Operation,
      forward: NextLink = () => Observable.of({ data: {} }),
    ): Observable<FetchResult> {
      if (typeDefs) {
        const directives = 'directive @client on FIELD';

        const definition = normalizeTypeDefs(typeDefs);

        operation.setContext(({ schemas = [] }) => ({
          schemas: schemas.concat([{ definition, directives }]),
        }));
      }

      const isClient = hasDirectives(['client'], operation.query);

      if (!isClient) return forward(operation);

      const resolvers =
        typeof clientStateConfig.resolvers === 'function'
          ? clientStateConfig.resolvers()
          : clientStateConfig.resolvers;
      const server = removeClientSetsFromDocument(operation.query);
      const { query } = operation;
      const type =
        capitalizeFirstLetter(
          (getMainDefinition(query) || ({} as any)).operation,
        ) || 'Query';

      const resolver = (fieldName, rootValue = {}, args, context, info) => {
        const { resultKey } = info;

        // rootValue[fieldName] is where the data is stored in the "canonical model"
        // rootValue[info.resultKey] is where the user wants the data to be.
        // If fieldName != info.resultKey -- then GraphQL Aliases are in play
        // See also:
        // - https://github.com/apollographql/apollo-client/tree/master/packages/graphql-anywhere#resolver-info
        // - https://github.com/apollographql/apollo-link-rest/pull/113

        // Support GraphQL Aliases!
        const aliasedNode = rootValue[resultKey];
        const preAliasingNode = rootValue[fieldName];
        const aliasNeeded = resultKey !== fieldName;

        // If aliasedValue is defined, some other link or server already returned a value
        if (aliasedNode !== undefined || preAliasingNode !== undefined) {
          return aliasedNode || preAliasingNode;
        }

        // Look for the field in the custom resolver map
        const resolverMap = resolvers[(rootValue as any).__typename || type];
        if (resolverMap) {
          const resolve = resolverMap[fieldName];
          if (resolve) return resolve(rootValue, args, context, info);
        }

        // TODO: the proper thing to do here is throw an error saying to
        // add `client.onResetStore(link.writeDefaults);`
        // waiting on https://github.com/apollographql/apollo-client/pull/3010

        return (
          // Support nested fields
          (aliasNeeded ? aliasedNode : preAliasingNode) ||
          (defaults || {})[fieldName]
        );
      };

      if (server) operation.query = server;
      const obs =
        server && forward
          ? forward(operation)
          : Observable.of({
              data: {},
            });

      return new Observable(observer => {
        // Works around race condition between completion and graphql execution
        // finishing. If complete is called during the graphql call, we will
        // miss out on the result, since the observer will have completed
        let complete = false;
        let handlingNext = false;
        obs.subscribe({
          next: ({ data, errors }) => {
            const observerErrorHandler = observer.error.bind(observer);
            const context = operation.getContext();

            handlingNext = true;
            //data is from the server and provides the root value to this GraphQL resolution
            //when there is no resolver, the data is taken from the context
            graphql(resolver, query, data, context, operation.variables, {
              fragmentMatcher,
            })
              .then(nextData => {
                observer.next({
                  data: nextData,
                  errors,
                });
                if (complete) {
                  observer.complete();
                }
//.........這裏部分代碼省略.........
開發者ID:petermichuncc,項目名稱:scanner,代碼行數:101,代碼來源:index.ts

示例5: terminatingCheck

 terminatingCheck(done, () => {
   // The batch should've been fired by now.
   expect(operation.getContext()).toEqual({ response: { data } });
   expect(operation2.getContext()).toEqual({ response: { data: data2 } });
   expect(operation3.getContext()).toEqual({ response: { data } });
   expect(batcher.queuedRequests.get('')).toBeUndefined();
 }),
開發者ID:SET001,項目名稱:apollo-link,代碼行數:7,代碼來源:batchLink.ts

示例6: Error

            entityObserver.subscribe(entity => {
                const query = queries[entity.fieldName];
                if (!query) {
                    throw new Error(`unknown fieldName: ${entity.fieldName}`);
                }

                let executeQuery = this._executeQuery;
                if (!executeQuery) {
                    const client: ApolloClient<never> = operation.getContext().client;
                    if (client instanceof ApolloClient === false) {
                        console.error(`client can't fine`, operation.getContext());
                        throw new Error(`client can't find`);
                    }

                    executeQuery = ({ query, variables }) => {
                        return client.query({
                            query,
                            variables,
                        });
                    };
                }

                executeQuery({
                    query,
                    variables: { id: entity.id },
                })
                    .then(result => {
                        observer.next(result);
                    })
                    .catch(e => {
                        observer.error(e);
                    });
            });
開發者ID:vvakame,項目名稱:til,代碼行數:33,代碼來源:subscriptionLinkConvert.ts

示例7: graphql

          next: ({ data, errors }) => {
            const observerErrorHandler = observer.error.bind(observer);
            const context = operation.getContext();

            handlingNext = true;
            //data is from the server and provides the root value to this GraphQL resolution
            //when there is no resolver, the data is taken from the context
            graphql(resolver, query, data, context, operation.variables, {
              fragmentMatcher,
            })
              .then(nextData => {
                observer.next({
                  data: nextData,
                  errors,
                });
                if (complete) {
                  observer.complete();
                }
                handlingNext = false;
              })
              .catch(observerErrorHandler);
          },
開發者ID:petermichuncc,項目名稱:scanner,代碼行數:22,代碼來源:index.ts

示例8: setter

 .then(req => setter(req, operation.getContext()))
開發者ID:SET001,項目名稱:apollo-link,代碼行數:1,代碼來源:index.ts


注:本文中的apollo-link.Operation類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。