我试图获取订阅内的数据。当我控制台在订阅中登录时,数据可用。但是当我尝试将数据存储到变量并且控制台将其记录在订阅之外时,数据是未定义的。
如何从订阅中获取结果并将其存储在变量中?
我是离子和棱角分明的新手。 :) 谢谢。
@Injectable()
export class UserServiceProvider {
users: any;
constructor(public http: Http) {
}
loadUsers() {
this.http.get("https://randomuser.me/api/?results=1")
.map(res => res.json())
.subscribe(data => {
//works fine
console.log(data.results);
this.users = data.results
});
//the variable is undefined.
console.log(this.users);
}
}
您的函数首先执行console.log(this.users),因此它给出了undefined,因为它没有得到响应并将其存储在数据中并分配给您的变量。
试试这个:
loadUsers() {
this.http.get("https://randomuser.me/api/?results=1")
.map(res => res.json())
.subscribe(data => {
//works fine
console.log(data.results);
this.users = data.results},
() => { console.log(this.users); } );
}
实际上你正在存储数据,而users
变量已经包含了所需的data.results
数据。这不是离子或角度的问题。
它只是订阅充当异步函数。当您尝试打印时,该过程正在进行中。因此undefined
错误。
如果你想在同一时刻看到数据,请执行以下操作;
() => console.log(this.users)