RxJS Map-array zu beobachten und zurück zu Ebene-Objekt im array

Ich habe ein array von Objekten, von denen ich mich übergeben muss jedes Objekt einzeln in die async-Methode (Prozess hinter gehandhabt wird mit Versprechen und dann umgewandelt wieder zu Beobachten über Observable.fromPromise(...) - dieser Weg ist erforderlich, da die gleiche Methode wird verwendet, wenn nur ein einzelnes Objekt übergeben, jederzeit; der Prozess ist, speichern von Objekten in die Datenbank). Dies ist ein Beispiel für ein array von Objekten:

[
  {
    "name": "John",
    ...
  },
  {
    "name": "Anna",
    ...
  },
  {
    "name": "Joe",,
    ...
  },
  {
    "name": "Alexandra",
    ...
  },
  ...
]

Nun habe ich die Methode " insert which die fügt Objekt in die Datenbank ein. Die store Methode aus der Datenbank-Instanz gibt die neu erzeugte id. Am Ende des ersten Objekts kopiert und abgebildet mit seiner neuen id:

insert(user: User): Observable<User> {
  return Observable.fromPromise(this.database.store(user)).map(
    id => {
      let storedUser = Object.assign({}, user);
      storedUser.id = id;
      return storedUser;
    }
  );
}

Dies funktioniert gut, falls ich die einfügen einzelnes Objekt. Ich möchte jedoch hinzufügen der Unterstützung für das einfügen von mehreren Objekten, die rufen Sie einfach die Methode, die für die einzelnen insert. Derzeit ist dies, was ich habe, aber es funktioniert nicht:

insertAll(users: User[]): Observable<User[]> {
  return Observable.forkJoin(
    users.map(user => this.insert(user))
  );
}

Den insertAll Methode ist das einfügen von Nutzern, wie erwartet (oder etwas anderes füllte sich die Datenbank mit Benutzer), aber ich bekomme keine Antwort zurück von ihm. Ich war zu Debuggen, was passiert ist und scheint, dass forkJoin ist immer Antwort, nur von dem ersten Benutzer zugeordnet, aber andere werden ignoriert. Abonnement insertAll tut man nicht alles, es gibt auch keine etwaige Fehler entweder über fangen auf insertAll oder über den zweiten parameter abonnieren insertAll.

So, ich bin auf der Suche nach einer Lösung, bei der der Beobachtbaren (in insertAll) emittieren würde wieder eine Vielzahl von neuen Objekten mit den Nutzern in dieser form:

[
  {
    "id": 1,
    "name": "John",
    ...
  },
  {
    "id": 2,
    "name": "Anna",
    ...
  },
  {
    "id": 3,
    "name": "Joe",,
    ...
  },
  {
    "id": 4,
    "name": "Alexandra",
    ...
  },
  ...
]

Ich wäre sehr froh für jede Anregung in die richtige Richtung. Vielen Dank im Voraus!

Kann nicht sehen, keine offensichtlichen Fehler. Es klingt wie Sie nur das erste Versprechen auflösen. Sind Sie sicher, dass die Datenbank unterstützt mehrere gleichzeitige verspricht? Was passiert, wenn Sie versuchen es nur mit Versprechungen und Promise.all? (Auch in deinem ersten code-snippet erstellen Sie eine storedUser, aber zurück user statt storedUser.)
Vielen Dank für die tolle Anregung, zum Glück ist es kein problem, mit dem gleichzeitigen Versprechen. Es war ein Tippfehler in diesem Beispiel, das ich jetzt behoben.

InformationsquelleAutor user1257255 | 2017-08-19

Schreibe einen Kommentar