Я использую angularfire2, чтобы выдвинуть Firebase на объект со статусом NEW.Мой бэкэнд прослушивает записи в этом списке и будет выполнять действия для каждого нового запроса со статусом NEW.Я хочу обработать 3 возможных результата: УСПЕХ, ОШИБКА и время ожидания.
add(book: Book) {
return this.authentication.user.pipe(
take(1),
switchMap(user => {
// Set owner for the backend to handle correctly
book.setOwner(user.uid);
// Add book request
const queueRef = this._afqueue.list(this.ADD_BOOK_QUEUE_PATH);
const pushPromise = queueRef.push({ status: { code: 'NEW' }, ...book })
.then(ref => {
console.log('Request to add a new book added to queue.');
return ref;
}) as Promise<any>;
return from(pushPromise);
}),
switchMap(ref => {
return this._afqueue.object(this.ADD_BOOK_QUEUE_PATH + '/' + ref.key)
.valueChanges();
}),
map(snap => snap['status']),
filter(status => status['code'] === 'SUCCESS' || status['code'] === 'ERROR'),
switchMap(status => {
if (status['code'] === 'SUCCESS') {
return Observable.create(function(observer) {
observer.complete(status['book_id']);
});
//return status['book_id'];
}
else if (status['code'] === 'ERROR') {
throw(status['error']);
}
}),
timeout(60000), // timeout after 60 secondes
);
}
Время ожидания происходит независимо от того, получаю ли я ОШИБКУ или УСПЕХ.Как я могу тайм-аут, только если я не получаю ни одного после 60 секунд?