2016-01-05 5 views
2

Я думал об использовании Observables для добавления .flatMapLatest() & .throttle() в клиентскую библиотеку HTTP на основе Promise (axios). Но я не собираюсь менять все приложение для работы с наблюдаемыми характеристиками, так что мне нужно что-то вроде этого:Wrapping Promise на основе JavaScript HTTP-клиент с RxJs Observable

Promise -> Наблюдаемых -> Promise

Любых удался сделать что-то вроде этого? Ни один из примеров, которые я нашел, не делает этого.

Я знаю, что RxJs предоставляет способ сделать Observable of Promise, а затем преобразовать его обратно в Promise, но не понял, как я могу применить это к нескольким обещаниям, созданным случайными последующими вызовами HTTP-клиента.

ответ

1

Наблюдатели автоматически усваивают обещания. Вы можете просто использовать их в RxJS звонков, и это будет «просто работать»:

myObservable.flatMap(x => somePromiseReturningFn("/api/" + x)) 

будет делать именно то, что вы хотите, чтобы она.

Замечания и обещания хорошо сочетаются и сочетаются с .toPromise на наблюдаемых и наблюдаемых потребляющих обещаниях автоматически. Вы можете смело смешивать и сопоставлять их.

Просто помните, что RxJS не знает об отмене обещаний библиотеки, поэтому, если вы полагаетесь на это, вам придется делать это вручную.

+0

Но как я вызвать новые вызовы в этой somePromiseReturningFn? Я не могу просто создавать новый Observable каждый раз. И я хочу сохранить API-интерфейс функции, а не привязывать это Observable к некоторому событию. –

+0

Я также предполагаю, что .flatMapLatest() даст мне последнее обещание в порядке, а не последнее обещание, которое разрешилось? –

+0

@JussiMullo да конечно. –

0

RXJS имеет хороший образец для этого.

Observable.fromPromise(somePromiseReturningThing) 

Это намного лучше, чем рисунок с плоским рисунком выше, поскольку плоская карта работает с ошибкой или законным возвратом одинаково. Относитесь к этому obserable с

Observable.fromPromise(aPromise) 
    .map(..) 
    .catch(..) 

и т.д.

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