当我将查询Cannot read property
的值视为group.query
时,我无法理解为什么会出现{"id":40,"gid":1000,"group":"test","builtin":false,"sudo":false,"users":[47,44]}
错误
checkbox_confirm_show(id: any){
let user: any
user = _.find(this.usr_lst[0], {id});
this.ws.call('group.query', [[["id","=", user.group.id]]]).subscribe(res=>{
this.group_users = res[0];
})
if(this.group_users.length === 1){
return true
};
return false
}
答案 0 :(得分:0)
如果this.ws.call()
正在返回一个异步观察者,那么在你的函数返回之后 之前,你的回调将不会运行(非常类似于Promise上的then
) 。因此,当您尝试访问时,this.group_users
未设置。
您需要将Observable映射到要检查的值,然后返回新的Observable。就像是
return this.ws.call('group.query', [[["id","=", user.group.id]]])
.map(res => res[0].length === 1)
然后,您可以订阅checkbox_confirm_show
或在模板中使用异步管道。
答案 1 :(得分:0)
this.group_users
在回调中异步设置,这可以在this.group_users.length
行运行后发生。您可能需要重构您的逻辑。
答案 2 :(得分:0)
@ryansilva是对的。 你的
this.ws.call('group.query', [[["id","=", user.group.id]]]).subscribe(res=>{
this.group_users = res[0];
})
是一个异步函数,当该函数返回时,您将设置this.group_users的值,但是您的代码if(this.group_users.length === 1)
不会等待它完成,所以当它运行时,group_user仍为null。