Verkettung Observablen in RxJS

Ich Lerne RxJS und Eckig 2. Sagen wir, ich habe ein Versprechen Kette mit mehreren asynchronen Funktionsaufrufen, mit denen abhängen, die auf dem vorhergehenden Ergebnis, das wie folgt aussieht:

var promiseChain = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve(1);
  }, 1000);
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(result + 2);
    }, 1000);
  });
}).then((result) => {
  console.log(result);

  return new Promise((resolve, reject) => {
      setTimeout(() => {
      resolve(result + 3);
        }, 1000);
  });
});

promiseChain.then((finalResult) => {
  console.log(finalResult);
});

Meine versuche, das gleiche zu tun, der allein mit RxJS ohne Einsatz verspricht, produziert die folgenden:

var observableChain = Observable.create((observer) => {
  setTimeout(() => {
    observer.next(1);
    observer.complete();
  }, 1000);
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) => {
    setTimeout(() => {
      observer.next(result + 2);
      observer.complete()
    }, 1000);
  });
}).flatMap((result) => {
  console.log(result);

  return Observable.create((observer) => {
    setTimeout(() => {
      observer.next(result + 3);
      observer.complete()
    }, 1000);
  });
});

observableChain.subscribe((finalResult) => {
  console.log(finalResult);
});

Es ergibt die gleiche Ausgabe wie das Versprechen Kette. Meine Fragen sind

  1. Mache ich das richtig? Gibt es irgendwelche RxJS bezogene Verbesserungen, die ich machen kann, um die oben genannten code
  2. Wie bekomme ich diese beobachtbaren Kette wiederholt auszuführen? d.h. das Hinzufügen weiterer Abonnements am Ende nur produziert eine zusätzliche 6 obwohl ich erwarte, dass es zu drucken 1, 3 und 6.

    observableChain.abonnieren((finalResult) => {
    console.log(finalResult);
    });

    observableChain.abonnieren((finalResult) => {
    console.log(finalResult);
    });

    1
    3
    6
    6

Ein Beispiel für die Verkettung verspricht mit rxjs6 hier: stackoverflow.com/a/55991374/1882064

InformationsquelleAutor Harindaka | 2016-06-12

Schreibe einen Kommentar