, repeat() . , HTTP- . repeat() , .
concatMap() , reqMode eqaul "done":
-: http://plnkr.co/edit/w0DdepslTaKrLSB3aIkA
import {Observable, Subject} from 'rxjs';
const result = new Subject();
const closeBuffer = new Subject();
const buffer = result.buffer(closeBuffer.asObservable());
function sendHttpRequest(reqMode) {
return Observable.of('{"reqMode":' + reqMode + '}')
.map(response => JSON.parse(response))
.concatMap(data => {
console.log('HTTP Response:', data);
result.next(data);
if (data.reqMode == 'done') {
return Observable.of(null);
} else {
return sendHttpRequest('"done"');
}
});
}
buffer.subscribe(val => console.log('Next: ', val));
sendHttpRequest(42).subscribe(() => {
console.log('done');
closeBuffer.next(null);
closeBuffer.complete();
});
of() , . Subject , buffer(). , ( , buffer, ).
:
HTTP Response: Object {reqMode: 42}
HTTP Response: Object {reqMode: "done"}
Next: [Object, Object]
. : Angular 2 + rxjs - , HTTP-