[英]Angular 2 waiting for promise and observable to resolve
在我的accountService中,我有一个对话框,要求用户输入返回承诺的用户名/密码。 如果他们单击关闭而不是关闭,并且验证器需要数据才能单击关闭,那么我想使用返回可观察值的数据登录。
loginModal() : boolean {
this.dpDialogService.input(
'Login',
[
{
label: 'Username/Email',
form: 'username',
data: '',
validators: [Validators.required],
validatorMsg: 'Username is required.'
},
{
label: 'Password',
form: 'password',
data: '',
validators: [Validators.required],
validatorMsg: 'Password is required.',
type: 'password'
},
]
).then(
close => {
this.login({username: close.username.value, password: close.password.value}).subscribe(
loginResult => {
return true;
},
errorResult => {
this.dpDialogService.error('Invalid username/password.');
return false;
}
)
},
dismiss => {
return false;
}
);
}
如何从函数返回此布尔值。 我猜我必须使用一个承诺,但不确定如何嵌套它们。
如果.subscribe
不返回承诺,则您需要创建一个根据.subscribe
结果解析为true / false的.subscribe
我假设返回的Promise必须始终解决,永不拒绝(基于dismiss =>
代码
).then(
close => {
return new Promise((resolve, reject) => {
this.login({username: close.username.value, password: close.password.value}).subscribe(
loginResult => {
resolve(true);
},
errorResult => {
this.dpDialogService.error('Invalid username/password.');
resolve(false);
}
)
})
},
dismiss => {
return false;
}
);
这是答案,谢谢您的帮助Jaromanda X
loginModal() : Promise<boolean> {
return new Promise((resolve, reject) => {
this.dpDialogService.input(
'Login',
[
{
label: 'Username/Email',
form: 'username',
data: '',
validators: [Validators.required],
validatorMsg: 'Username is required.'
},
{
label: 'Password',
form: 'password',
data: '',
validators: [Validators.required],
validatorMsg: 'Password is required.',
type: 'password'
},
]
).then(
close => {
this.login({username: close.username.value, password: close.password.value}).subscribe(
loginResult => {
resolve(true);
},
errorResult => {
this.dpDialogService.error('Invalid username/password.');
resolve(false);
}
)
},
dismiss => {
resolve(false);
}
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.