2017-01-15 8 views
1

In meinem AccountService habe ich ein Dialogfeld, das den Benutzer nach Benutzername/Passwort fragt, die eine Zusage zurückgibt. Wenn sie auf Schließen klicken, anstatt zu verwerfen, und die Prüfer die Daten benötigen, bevor sie auf Schließen klicken können, möchte ich mich mit den Daten anmelden, die eine Observable zurückgeben.Angular 2 Warten auf Versprechen und beobachtbare zu lösen

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; 
     } 
    ); 
} 

Wie gebe ich diesen boolean von der Funktion zurück. Ich schätze, ich muss ein Versprechen verwenden, aber nicht sicher, wie mit ihnen verschachtelt werden.

+1

so, Sie verstehen dass der Code in '.then (close => {' gibt nichts zurück –

+0

Ja das ist, was ich versuche herauszufinden, ich möchte ein kombiniertes Ergebnis aus den verschachtelten Aufrufe. – user1779362

+0

'Ich möchte ein kombiniertes Ergebnis aus den verschachtelten Anrufe '- hmmm, nicht sicher, was Sie damit meinen ... kombiniert Ergebnis schlägt vor, mindestens zwei Ergebnisse zu einem ... –

Antwort

3

Wenn .subscribe nicht ein Versprechen nicht zurückgibt, dann müssen Sie ein Versprechen schaffen, die wahr/falsch je nach Ergebnis der .subscribe

immer lösen muß aufgelöst Ich gehe davon aus dem zurückgegebene Versprechen, ablehnen nie (basierend auf dem dismiss => Code

).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; 
    } 
); 
+0

Sorry, ein paar Tippfehler ursprünglich –

+0

oh warte .. .angualr2 bedeutet coffeescript ... meine Antwort kann irreführend sein –

+0

Also wenn die aufrufende Funktion wie folgt ist: this.accountService.loginModal(), möchte ich in der Lage sein, this.accountService.loginModal(). then (...) Ich weiß, ob sie korrekte Informationen eingeben und erfolgreich eingeloggt sind. Also brauche ich ein Versprechen von der gesamten Funktion – user1779362

0

Hier ist die Antwort, danke für die Hilfe 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); 
      } 
     ); 
    }); 
Verwandte Themen