我试图从http.get()获取值并将其分配给局部变量。
这是我的代码。的 UserName.ts
import { Http } from '@angular/http';
this.http.get('http://localhost:8000/user/').subscribe(res => {
this.username$ = res;
console.log(this.username$)}) //working
console.log(this.username$)
我正在未定义作为输出
http电话 - http://localhost:8000/user/ 只会返回一个用户名。我必须将它存储在变量中。并使用它来调用另一个http调用
return this.http.get(`http://localhost:8001/getdettails/${this.username$}/${experimentPath}`)
请帮我解决这个问题。谢谢。
答案 0 :(得分:4)
你必须在好的时候打电话(例如:在你的观察者的回调中)。
目前,您的第一个订阅在到达最后console.log
行时没有时间完成。因此,该变量尚未设定。只有在稍后,当订阅返回时,才会执行回调,因此回调中的console.log
会显示一些值。
要解决您的问题,您可以在第一个订阅的回调中进行第二次http调用,但嵌套订阅不是一个好习惯。
(感谢@ Jota.Toledo):您可以查看这篇文章,以便更好地使用RxJ mergeMap
将第一个observable的结果链接到第二个http调用:
How to chain Http calls in Angular2
在您的情况下,这将导致类似这样的事情:
import 'rxjs/add/operator/mergeMap';
this.http.get('http://localhost:8000/user/').map((res: Response) => {
this.username$ = res;
return res;
})
.mergeMap(username => this.http.get(`http://localhost:8001/getdettails/${this.username$}/${experimentPath}`)).map((res: Response) => res.json())
.subscribe(res => {
console.log('Here is your result from second call:');
console.log(res);
});
(也许你必须略微适应,具体取决于输出)