Как преобразовать подход Promise в Observable в angular2?

Я читал об наблюдаемых и о многих преимуществах, которые они имеют по сравнению с Promise. Я разрабатываю бесконечную прокрутку на angular и нашел этот код: https://github.com/Hacklone/angular2-cool-infinite-grid, но реализация выполняется с помощью Promises, поэтому я хочу переписать код, но используя Observable. Как начать? а потом как потреблять?

Вот метод, используемый в реализации:

private async getItems(fromIndex: number, numberOfItems: number): Promise<any[]> {
  try {
      const result = this.itemIterator.next(fromIndex, numberOfItems);
      if (!result) {
        return [];
      }
      if (typeof (result.value.then) === 'function') {
        return await result.value;
      }
      else if (result.value instanceof Array) {
        return result.value;
      }
      return [];
  }
  catch (e) {
    console.log(e);
  }
  return [];
}

person sirandy    schedule 11.04.2017    source источник


Ответы (2)


Сделай это

private async getItems(fromIndex: number, numberOfItems: number): Observable<any[]> {
  return Observable.create(observer => {

  try {
      const result = this.itemIterator.next(fromIndex, numberOfItems);
      if (!result) {
        observer.next([]);
        observer.complete();

        return;
      }
      if (typeof (result.value.then) === 'function') {
        let value = await result.value;
        observer.next(result.value);
        observer.complete();

        return;

      }
      else if (result.value instanceof Array) {
        observer.next(result.value);
        observer.complete();

        return;
      }
      observer.next([]);
      observer.complete();

  }
  catch (e) {
    console.log(e);
    observer.next([]);
    observer.complete();
  }

  });
}
person Deepak Sharma    schedule 01.10.2017

Вы пробовали Observable.fromPromise? Вы можете найти документацию здесь http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-fromPromise

person Hung Cao    schedule 11.04.2017
comment
А вот Promise‹any[]› сохранится во всем коде — есть пара методов с таким же типом возвращаемого значения — я хочу снять этот компонент и заменить его своим собственным компонентом, написанным на Observables. - person sirandy; 12.04.2017