Ich bin neu in der ganzen Rx Sache und reaktive Programmierung, aber ich muss mit einer solchen Situation umgehen. Ich möchte ein beobachtbares Intervall, um den Status einer Hardware durch eine POST-Anforderung an ihre REST-API alle 500 ms zu überprüfen, um zu sehen, ob sich die Antwort ändert. Sobald es sich also ändert, möchte ich, dass eine solche POST-Anfrage, die sofort beobachtbar ist, sofort beendet wird und die Ressource anderen zukünftigen Operationen überlassen wird. Hier ist ein Stück Code.Wie kann man ein Intervall, das unter der Bedingung in Angular2 oder RxJS beobachtbar ist, abbestellen oder entsorgen?
myLoop(item_array:number[], otheroption : string){
for (let item of item_array){
//set hardware option, still a request
this.configHardware(item,otheroption)
//after config the hardware, command hardware take action
.flatMap(() => {
//this return a session id for check status
this.takeHardwareAction()
.flatMap((result_id) => {
//I want every 500ms check if hardware action is done or not
let actionCheckSubscription = IntervalObservable.create(500).subscribe(
() => {
//So my question is, can I unsubscribe the actionCheckSubscription in here on condition change? For example,
if (this.intervalCheckingStatus(result_id))
actionCheckSubscription.unsubscribe() ;
}
) ;
})
})
}
}
erstaunlich, vielen Dank. Diese reaktive Programmierung ist aus meiner Sicht wirklich komisch. Ich brauche etwas Zeit, um alle neuen Aussagen zu verdauen. Kann ich fragen, ob dies die übliche Art ist, die REST-API-Kommunikation in Angular2 oder RxJS zu erstellen? –
In angular2 injizieren Sie normalerweise 'Http' (https: // eckig.io/docs/ts/neuste/guide/server-communication.html #! # fetch-data) jeder http-Aufruf gibt auch ein 'Observable' zurück und funktioniert damit nahtlos mit RxJS - in reinem RxJS kann man' Observable verwenden. Ajax (...) ' – olsn
Wird das Observable herunterfahren? Es stoppt nur ein Intervall http://reactivex.io/documentation/operators/take.html 'Sie können nur die ersten n Elemente emittieren, die von einem Observable ausgegeben werden, und dann den Rest ausführen, indem Sie den Operator Observable with the Take modifizieren. 'Müsstest du dich nicht manuell abmelden? – Gary