我一般都是RxJS和FRP的新手。我想到将ExpressJS应用程序中现有的promise链转换为可观察的实践。我知道这可能不是最好的例子,但也许有人可以提供一些帮助。
我想做的事:
var prom1 = new Promise(function(resolve, reject) {
if (true) {
reject('reason');
}
resolve(true);
});
var prom2 = new Promise(function(resolve, reject) {
resolve(true);
});
// What do I do here? This is what I've tried so far...
var source1 = Rx.Observable.fromPromise(prom1);
var source2 = source1.flatMap(Rx.Observable.fromPromise(prom2));
var subscription = source2.subscribe(
function (result) { console.log('Next: ' + result); },
// I want my error 'reason' to be made available here
function (err) { console.log('Error: ' + err); },
function () { console.log('Completed'); });
答案 0 :(得分:5)
flatMap将Observable of Observables转换为Observable。它在Promises的许多例子中使用,因为通常你有一个可观察的,并且在map函数中你想为每个"项目创建一个承诺。可观察的emmits。因为每个fromPromise调用都会创建一个新的Observable,这使得它成为一个可观察的观察者"。 flatMap将其减少为" flat"观察到。
在您的示例中,您执行了不同的操作,将单个promise转换为observable,并希望将其与另一个observable链接(也可以从单个promise中创建)。 Concat做你想要的,它将两个可观察的链子连在一起。
错误案例将按您的预期运作。
答案 1 :(得分:-1)
Observable.forkJoin
在接收其他Observable数组时效果很好。
Rx.Observable.forkJoin([this.http.get('http://jsonplaceholder.typicode.com/posts'), this.http.get('http://jsonplaceholder.typicode.com/albums')]).subscribe((data) => {
console.log(data);
});