[英]Angular 2 waiting for promise and observable to resolve
In my accountService, I have a dialog that asks the user for username/password which returns a promise. 在我的accountService中,我有一个对话框,要求用户输入返回承诺的用户名/密码。 If they click close rather than dismiss and the validators require the data before they can click close, then I want to log in with that data which returns an observable. 如果他们单击关闭而不是关闭,并且验证器需要数据才能单击关闭,那么我想使用返回可观察值的数据登录。
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;
}
);
}
How do I return this boolean from the function. 如何从函数返回此布尔值。 I am guessing I have to use a promise but not sure how with them being nested. 我猜我必须使用一个承诺,但不确定如何嵌套它们。
If .subscribe
doesn't return a promise, then you need to create a promise that resolves to true/false depending on result of .subscribe
如果.subscribe
不返回承诺,则您需要创建一个根据.subscribe
结果解析为true / false的.subscribe
I'm assuming the returned promise needs to always resolve, never reject (based on the dismiss =>
code 我假设返回的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;
}
);
Here is the answer, thanks for the help Jaromanda X 这是答案,谢谢您的帮助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.