Dans mon compteService, j'ai une boîte de dialogue qui demande à l'utilisateur un nom d'utilisateur / mot de passe qui renvoie une promesse. S'ils cliquent sur fermer plutôt que sur ignorer et que les validateurs ont besoin des données avant de pouvoir cliquer sur fermer, alors je veux me connecter avec ces données qui renvoient un 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;
        }
    );
}

Comment renvoyer ce booléen à partir de la fonction. Je suppose que je dois utiliser une promesse, mais je ne sais pas comment les imbriquer.

1
user1779362 15 janv. 2017 à 06:24

2 réponses

Meilleure réponse

Si .subscribe ne renvoie pas de promesse, vous devez créer une promesse qui se résout en vrai / faux en fonction du résultat de .subscribe

Je suppose que la promesse retournée doit toujours être résolue, ne jamais rejeter (en fonction du code 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;
    }
);
4
Jaromanda X 15 janv. 2017 à 03:37

Voici la réponse, merci pour l'aide 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);
            }
        );
    });
0
user1779362 15 janv. 2017 à 04:59