2016-12-19 2 views
1

Я хочу вызвать функцию, которая вернет обещание, а затем передаст результат другой функции, которая вернет наблюдаемую. Мне нужно сделать это последовательно и получить окончательный результат в качестве наблюдаемого, чтобы я мог подписаться.Rxjs - Звонить обещание и наблюдаемое последовательно

Например:

// Call a function and return a Promise 
myPromise() {} 

// Make an http call and return an Observable 
myObservable() {} 

// Call myPromise() then call myObservable() and return 
// an Observable with the result 
// *I don't know how this function should be* 
myFunction() {} 

// Subscription 
myFunction().subscribe(
    result => console.log(result), 
    error => console.log(error), 
() => console.log('completed')); 

Как я могу это сделать?

+0

С чем вы столкнулись? Возможно, я неправильно понял ваш вопрос, это кажется довольно простым. 'promReturningFunction(). then (observableReturningFunction) .subscribe (observer)' и перед вызовом 'promReturningFunction', убедитесь, что он впервые вызван. Что мне здесь не хватает? – user3743222

+0

У вас есть образцы кода, чтобы мы могли вам помочь? – thalesmello

+0

Не нужно звонить только один раз, забыть об этом. Я отредактировал вопрос с небольшим примером кода. –

ответ

1

Вы можете сделать следующее:

let stream$ = Observable.defer(() => Observable.fromPromise(myPromise())) 
    .flatMap(promiseResult => myObservable(promiseResult)); 

stream$.subscribe(obsResult => console.log(obsResult)); 

.defer необходимо, чтобы гарантировать, что ваше обещание-метод вызывается с каждым подписываться, а не только один раз во время инициализации.

+0

Как я могу управлять ошибками обоих? –

+0

Просто добавьте .catch (...) после flatMap, который будет обрабатывать любую предыдущую ошибку – olsn

+0

... или вы просто используете второй аргумент в своей .subscribe, который также получит любые брошенные ошибки – olsn

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