Angular 2 http - 合并多个 Observable
Angular 2 http - combine multiple Observables
我对异步 Observable 世界完全陌生。我希望有人能帮助我。
我有两个Observable<boolean>
,我想把它们结合起来。
我尝试使用:
var obs1 = Observable.of(true).delay(1000);
var obs2 = Observable.of(false).delay(100);
obs1.combineLatest(obs2, (obs1Val, obs2Val) => {
//bool result
});
差不多就这样了……
几乎是因为我想在 obs1 完成时启动 obs2,而 combineLatest 两者同时启动。
obs1 和 obs2 在我的案例中是简单的示例,即 angular http 请求:
obs1 : Observable<boolean> = http.get(...).map(d => <boolean>d);
在此先感谢您的帮助
如果你想在收到obs1的响应时启动obs2,必须在obs1.subscribe的onNext中调用它。
getBothResult() {
return Rx.Observable.create(function (observer) {
obs1 : Observable<boolean> = http.get(...).map(d => <boolean>d);
obs1.subscribe((obs1Value) {
Observable.of(false).delay(100).subscribe(obs2Value => {
//compute value from obs1Value and obs2Value as they are visible in closure assign it to eg. finalValue
var finalValue = obs1Value + obs2Value;
observer.onNext(finalValue);
});
});
});
}
很可能存在一个运算符以某种漂亮的方式完成所有这些事情,但我不知道。
您可以使用observable zip
let obs1 = Observable.of(true).delay(1000);
let obs2 = Observable.of(false).delay(100);
let source = Observable.zip(
obs1,
obs2,
(ob1, ob2) => {
return {
value1: ob1,
value2: ob2
};
}
);
source.subscribe(data => console.log(data))
因为你想让obs2在obs1之后执行,我们可以等待响应
在 Rx 世界中,你应该避免订阅一个 observable,然后在回调中订阅另一个 observable。
这里有一种方法可以让您得到想要的结果。
var obs1 = Observable.of(true).delay(1000);
var obs2 = Observable.of(false).delay(100);
var obsOf1And2 = obs1.flatMap(obs1Response =>
obs1Response.flatMap(obs2Response => {
// do what you want with both responses
}));
obsOf1And2.subscribe(console.log);
我对异步 Observable 世界完全陌生。我希望有人能帮助我。
我有两个Observable<boolean>
,我想把它们结合起来。
我尝试使用:
var obs1 = Observable.of(true).delay(1000);
var obs2 = Observable.of(false).delay(100);
obs1.combineLatest(obs2, (obs1Val, obs2Val) => {
//bool result
});
差不多就这样了…… 几乎是因为我想在 obs1 完成时启动 obs2,而 combineLatest 两者同时启动。
obs1 和 obs2 在我的案例中是简单的示例,即 angular http 请求:
obs1 : Observable<boolean> = http.get(...).map(d => <boolean>d);
在此先感谢您的帮助
如果你想在收到obs1的响应时启动obs2,必须在obs1.subscribe的onNext中调用它。
getBothResult() {
return Rx.Observable.create(function (observer) {
obs1 : Observable<boolean> = http.get(...).map(d => <boolean>d);
obs1.subscribe((obs1Value) {
Observable.of(false).delay(100).subscribe(obs2Value => {
//compute value from obs1Value and obs2Value as they are visible in closure assign it to eg. finalValue
var finalValue = obs1Value + obs2Value;
observer.onNext(finalValue);
});
});
});
}
很可能存在一个运算符以某种漂亮的方式完成所有这些事情,但我不知道。
您可以使用observable zip
let obs1 = Observable.of(true).delay(1000);
let obs2 = Observable.of(false).delay(100);
let source = Observable.zip(
obs1,
obs2,
(ob1, ob2) => {
return {
value1: ob1,
value2: ob2
};
}
);
source.subscribe(data => console.log(data))
因为你想让obs2在obs1之后执行,我们可以等待响应 在 Rx 世界中,你应该避免订阅一个 observable,然后在回调中订阅另一个 observable。
这里有一种方法可以让您得到想要的结果。
var obs1 = Observable.of(true).delay(1000);
var obs2 = Observable.of(false).delay(100);
var obsOf1And2 = obs1.flatMap(obs1Response =>
obs1Response.flatMap(obs2Response => {
// do what you want with both responses
}));
obsOf1And2.subscribe(console.log);