2017-07-24 1 views
0

Wir müssen eine Methode des Typs void in typescript aufrufen, aber type script sollte erst mit der nächsten Codezeile fortgesetzt werden Die Ausführung der Void-Methode ist abgeschlossen. Wie können wir das erreichen?Angular 2 typescript Aufruf einer void -Methode Warten auf die Ausführung dieser Methode vor dem Ausführen des nächsten Schritts

im folgenden Beispiel müssen wir saveEventDetails von closeWindow aufrufen, aber im nahen Fenster var win = window.open ("about: blank", "_self"); win.close(); sollte nicht ausgeführt werden, bis die Ausführung der saveEventDetails-Methode abgeschlossen ist.

EX: -

saveEventDetails(buttonClick: string = "") {   
     this.eventForm.markAsUntouched(false); 
     this.eventForm.value.claimNumber = this.appContext.claimNumber; 
     this.eventsService.patch(this.eventForm.value).subscribe(res => { 
      this.loadUserTrackingDetails(); 
      this.userTrackingService.saveUserTrackingDetails(this.userTrackingModel).subscribe(r => { 
       if (buttonClick == "") { 
        this.showSuccess(); 
       } 
       return Observable.of(); 
      }); 
     }, (errResp: any) => { 
     this.errorMessage = "Unable to load EVENT, invalid user or claim number"; 
      return Observable.of(); 
     }); 
    } 




    closeWindow() { 
     this.eventForm.value.cmResidentStateLicensed = false; 
     Observable.create((observer: Observer<any>) => { 
      this.saveEventDetails("popup") 
      var v = true; 
     })    
      .subscribe(data => {     
       var win = window.open("about:blank", "_self"); 
       win.close(); 
      }, 
      (errResp: any) => { 
       this.errorMessage = "Unable to Save EVENT, Please try after soemtime"; 
      });  



    } 
+0

Die Antwort ist, dass diese Methode eine beobachtbare, nicht void zurückgibt. Momentan kann es sowieso nicht funktionieren, da die Einstellung der Fehlermeldung unabhängig von der Sache ist, für die Sie sie einstellen. – jonrsharpe

+0

Sie sollten in Ihrer Funktion saveEventDetails() eine Observable zurückgeben und diese dann bei closeWindow() subskribieren. – invisible

+0

Sie haben vergessen, '' 'am Ende der Anweisung zu setzen. Es sollte "zurückgegeben" Wert sein. Auch 'close()' Funktion funktioniert nicht, trotzdem müssen Sie es entfernen. –

Antwort

0

Warum Sie nicht die beobachtbare abonnieren, die von dem saveEventDetails() zurückgegeben wird?

closeWindow() { 
    this.eventForm.value.cmResidentStateLicensed = false; 
    this.saveEventDetails("popup").subscribe(data => {     
     var v = true; 
     var win = window.open("about:blank", "_self"); 
     win.close(); 
    }, 
    (errResp: any) => { 
     this.errorMessage = "Unable to Save EVENT, Please try after soemtime"; 
    });  
} 
+1

wenn ich auf diese.saveEventDetails ("popup") subskribieren, ich werfende Eigenschaft 'subscribe' existiert nicht auf Typ ' Leere' – Pani

Verwandte Themen