У меня есть кнопка, которая вызывает функцию сохранения, которая вызывает функцию сохранения в службе.
<button (click)="save()">save</button>
save() {
this.someService.save().subscribe(r => {
console.log({ r });
});
}
Я хочу, чтобы при каждом нажатии кнопки действие (метод сохранения из службы) вставлялось в очередь.
После завершения текущего метода сохранения в службе затем извлеките следующий из очереди и снова вызовите, чтобы сохранить метод из службы и т. Д., Пока в очереди ничего не останется.
Я пытаюсь что-то вроде этого, но я не уверен, почему это работает только один раз ..
* примечание: функция save
в SomeService
Я не могу изменить.
save() {
this.someService.addToQueue(true).subscribe(r => {
console.log({ r });
});
}
@Injectable({
providedIn: "root"
})
export class SomeService {
queue = new Subject();
constructor() {
this.queue.pipe(concatMap(a => this.save(a)));
}
addToQueue(saveAndExit) {
this.queue.next(saveAndExit);
return this.queue;
}
save(saveAndExit) {
return Observable.create(obs => {
setTimeout(() => {
obs.next({ data: true });
}, 5000);
});
}
}
Демонстрация по стеку