2016-09-12 2 views
4

Я работаю в Angular 2, и я делаю серию асинхронных вызовов из службы. Некоторые вызовы должны быть сделаны условно только в моей цепочке вызовов. Мои первоначальная цепочка вызовов выглядит следующим образом:Условное наблюдение за цепью в угловом 2

псевдокоде

this.post().flatMap(() => this.put()).flatMap(() => this.get())..etc. 

Тогда мне нужно условно приложить дополнительные асинхронные вызовы к моей сети на основе переменного массива.

Я использую такой подход:

псевдокоде

...flatMap(() => return this.additionalCallsFunction(callArray)) 
.flatMap(() => this.finalPostRequest()).subscribe(...) 

additionalCallsFunction(callArray){ 
    if(callArray.length === 0) return Observable.empty() 
    else { return this.get().concatMap((res) => this.put(res).flatMap(() => { 
    callArray.removefirstItem() 
    return this.additionalCallsFunction(callArray) 
    }); 
} 

Я достаточно новый для угловых и наблюдаемых характеристик, так что я не уверен, что я правильно приближаюсь к этому , Независимо от того, пустой или нет мой дополнительный массив вызовов, или нет, я вижу, что мои начальные звонки происходят, но ни дополнительные вызовы, ни мой окончательный запрос на почту никогда не проходят, когда моя функция возвращается. Я также не вижу ошибок в консоли. Я попытался заменить .empty() на .never(), но никаких изменений.

Любая помощь/совет оценены!

+0

Поскольку мне действительно не нужны дополнительные функции, предоставляемые Observables, я просто решил использовать метод toPromise() и решил его с помощью обещаний. Было бы аккуратно знать, где я ошибся. – wincelet

ответ

1

У меня была такая же ситуация, и я закончил с использованием Observable.of(undefined) вместо Observable.empty(). Не знаю почему, но Observable.empty() прерывает цепь.

Любое дальнейшее объяснение очень ценится.

Смежные вопросы