Bor*_*ora 10 angular2-observables angular
这个问题已在这里提出.但是,由于提问者的申请背景涉及太多问题,我无法理解基础知识.例如,有一个queryArr参数.它有什么作用?
无论如何,我需要一些关于如何以最简单的方式进行同步http调用的指导.我想出的解决方案是必须以"嵌套"顺序订阅observable.例如,有可观察的ox和oy.被调用的请求oy数据取决于数据来自ox:
xData: string = "";
yData: string = "";
ox.subscribe(
data => {xData = data;},
error => console.log(error),
() => {
oy.subscribe(
data => {yData = xData*data;},
error => console.log(error),
() => console.log("aaa")
);
}
);
Run Code Online (Sandbox Code Playgroud)
上次我记得(我不做javascript,并且是一个小新手),在我订阅的范围内oy,xData或者yData不能再看到了.如果我错了,请纠正我并指出正确的方向.
有没有"精细"的解决方案或更好的方法来做这种事情?
我认为您可以查看flatMap运算符以执行HTTP请求,等待其响应并执行另一个请求.
这是一个示例:
executeHttp(url) {
return this.http.get(url).map(res => res.json());
}
executeRequests() {
this.executeHttp('http://...').flatMap(result => {
// result is the result of the first request
return this.executeHttp('http://...');
}).subscribe(result => {
// result is the result of the second request
});
}
Run Code Online (Sandbox Code Playgroud)
如果您想要访问该subscribe方法中的两个结果,您可以利用Observable.forkJoin和Observable.of:
executeRequests() {
this.executeHttp('http://...').flatMap(result => {
// result is the result of the first request
return Observable.forkJoin(
Observable.of(result),
this.executeHttp('http://...')
).subscribe(results => {
// results is an array of the results of all requests
let result1 = results[0];
let result2 = results[1];
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34581 次 |
| 最近记录: |