2016-10-17 3 views
1

Nach dem Abbestellen muss ich eine Funktion mit einer ID aufrufen, die ursprünglich in den Daten gesendet wurde. Was ist der richtige Weg?RxJS abbestellen mit ID

Es ist eine verschachtelte Observable wie im folgenden Ausschnitt zu sehen.

Observable.create(subscriber => { 
    const myData = nested.getData 
     .map(x => x > 1) 
     .subscribe(subscriber); 

    return() => { 
     myData.unsubscribe(); 
     callWithIdThatIsInData({id:123}) 
    }; 
}) 

Wenn unsubscribed, ich callWithIdThatIsInData müssen() mit einer Eigenschaft, was beobachtbar in der verschachtelten gesendet wurde ..

Kann jemand mich in die richtige Richtung zeigen, bitte?

Antwort

2

Eine Lösung besteht darin, Ihre Eigenschaften, die mit Ihrer Filterbedingung übereinstimmen, während des Abonnements der verschachtelten Observablen zu speichern. Hier

ein Beispiel:

const nested = Rx.Observable.from([1, 2, 3, 4, 5]); 

const stream = Rx.Observable.create((subscriber) => { 
    const saved = []; 

    const myData = nested.filter(x => x > 1).subscribe(x => { 
    subscriber.next(x); 
    saved.push(x); 
    }); 

    subscriber.complete(); 

    return() => { 
    myData.unsubscribe(); 
    //Here you have access to your data 
    console.log(saved); 
    } 

}); 

stream.subscribe(x => console.log(x)); 
+0

Dankes-. Das war offensichtlich, aber ich bin neu bei rxjs. Ich hätte gefragt, ob ich mich frage, ob es eine Möglichkeit gibt, die Daten nur einmal zu speichern, da sich meine ID während der Streams nie ändern wird. Ich möchte keine Zyklen verschwenden. Danke noch einmal – Thibs