[英]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.