[英]Wait function finish in if
我正在尝试进行测试,但它不会等待在数据库中发出请求,并且看起来该函数返回未定义,并且仅在请求之后它返回 true 或 false 并且测试落在 else 上。
我的问题是在 4/5 角的 RestService
执行密码验证以执行更新的函数
handler: data => {
if (this.checkPassword(data.password)) {
console.log("4--------");
// logged in!
let jsonCreate = {
name: form.value.inputName,
email: form.value.inputEmail,
password: form.value.inputPassword,
description: form.value.inputDescription,
id: this.id
};
console.log('jsonCreate');
console.log(jsonCreate);
//adiciona cliente ao banco
this.rest.put('usersClient/atualizacao', jsonCreate)
.subscribe(userUpdated => {
console.log(userUpdated);
});
} else {
console.log("3--------");
return false;
}
}
检查密码功能
}
public checkPassword(password){
console.log("check");
let jsonPost = {};
jsonPost["email"] = this.user.email;
jsonPost["senha"] = password;
console.log(jsonPost);
this.rest.post('Login/clientAuth', jsonPost).subscribe(user => {
console.log("11--------");
if(this.isEmptyObject(user)==true){
console.log("1--------");
return false;
}
else{
console.log("2--------");
return true;
}
});
}
为了等待异步操作,您必须返回this.rest.post
创建的 observable:
public checkPassword(password){
...
return this.rest.post('Login/clientAuth', "").map(user => !this.isEmptyObject(user));
});
然后,在data
订阅这个 observable :
handler: data => {
this.checkPassword(data.password).subscribe(isLoggedIn => {
if (isLoggedIn) {
let jsonCreate = {
...
};
this.rest.put('usersClient/atualizacao', jsonCreate).subscribe(userUpdated => {
console.log(userUpdated);
});
} else {
return false;
}
});
}
注意:如果还需要等待data
外的put
动作,则不能订阅checkPassword
。 你需要做这样的事情:
handler: data => {
this.checkPassword(data.password).flatMap(isLoggedIn => {
if (isLoggedIn) {
let jsonCreate = {
...
};
return this.rest.put('usersClient/atualizacao', jsonCreate).map(userUpdated => {
console.log(userUpdated);
});
} else {
return false;
}
});
}
并订阅data
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.