簡體   English   中英

Angular 2等待承諾並可以觀察到解決

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM