当前位置: 首页>>代码示例>>TypeScript>>正文


TypeScript Observable.subscribe方法代码示例

本文整理汇总了TypeScript中apollo-link.Observable.subscribe方法的典型用法代码示例。如果您正苦于以下问题:TypeScript Observable.subscribe方法的具体用法?TypeScript Observable.subscribe怎么用?TypeScript Observable.subscribe使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在apollo-link.Observable的用法示例。


在下文中一共展示了Observable.subscribe方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。

示例1: resolve

 return new Promise<R>((resolve, reject) => {
   observable.subscribe({
     next: data => {
       if (completed) {
         console.warn(
           `Promise Wrapper does not support multiple results from Observable`,
         );
       } else {
         completed = true;
         resolve(data);
       }
     },
     error: reject,
   });
 });
开发者ID:sventschui,项目名称:graphql-tools,代码行数:15,代码来源:linkToFetcher.ts

示例2: Promise

export function observableToAsyncIterable<T>(observable: Observable<T>): AsyncIterator<T> {
  const pullQueue: Callback[] = [];
  const pushQueue: any[] = [];

  let listening = true;

  const pushValue = ({ data }: any) => {
    if (pullQueue.length !== 0) {
      pullQueue.shift()({ value: data, done: false });
    } else {
      pushQueue.push({ value: data });
    }
  };

  const pushError = (error: any) => {
    if (pullQueue.length !== 0) {
      pullQueue.shift()({ value: { errors: [error] }, done: false });
    } else {
      pushQueue.push({ value: { errors: [error] } });
    }
  };

  const pullValue = () => {
    return new Promise(resolve => {
      if (pushQueue.length !== 0) {
        const element = pushQueue.shift();
        // either {value: {errors: [...]}} or {value: ...}
        resolve({
          ...element,
          done: false,
        });
      } else {
        pullQueue.push(resolve);
      }
    });
  };

  const subscription = observable.subscribe({
    next(value: any) {
      pushValue(value);
    },
    error(err: Error) {
      pushError(err);
    },
  });

  const emptyQueue = () => {
    if (listening) {
      listening = false;
      subscription.unsubscribe();
      pullQueue.forEach(resolve => resolve({ value: undefined, done: true }));
      pullQueue.length = 0;
      pushQueue.length = 0;
    }
  };

  return {
    async next() {
      return listening ? pullValue() : this.return();
    },
    return() {
      emptyQueue();
      return Promise.resolve({ value: undefined, done: true });
    },
    throw(error) {
      emptyQueue();
      return Promise.reject(error);
    },
    [$$asyncIterator]() {
      return this;
    },
  };
}
开发者ID:apollostack,项目名称:graphql-tools,代码行数:73,代码来源:observableToAsyncIterable.ts


注:本文中的apollo-link.Observable.subscribe方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。