2016-06-29 8 views
1

Guten Tag. Ich bin neu in ts und kann nicht verstehen, wie Callback-Funktionen in ts arbeiten. Ich habe diese expample:Wie funktionieren Callback-Funktionen in TS?

this.signalRService.autocompletePerson((res => { 
      console.log(res); 
      if(this.surname != ""){ 
       this.dialogService.GetAutocomplite("surname-face-input", this.SetArrayToAutocomplite(res)); 
      } 
      else if(this.surname == "" ){ 
       this.name = ""; 
       this.otchestvo =""; 
       this.age = ""; 
      } 
     }).bind(this), { surname: this.surname}); 

public autocompletePerson(callback:(any) => void, personCard:any){ 
     var data:Array<CallAcceptanceFaceCard>; 
     this.hubSignalRProxy.invoke('autocompletePerson', personCard).done(function(variants){ 
        console.log("done"); 
        callback(variants); 

     }) 
     .fail(function(err){ 
      console.log("err"); 
      console.log(err); 
     }); 

Die erste quetion: wird der Parameter callback:(any) => void für (res => { } gemacht?

Die zweite: was implementiert zuerst res => { } oder Körper von autocompletePerson(callback:(any) => void, personCard:any)?

Und drittens: Welchen Teil des Codes warten einen anderen zu beenden (von res und autocompletePerson)?

+0

gibt es keine Callback-Funktionen in Ts. Sie sind einfach normale JavaScript-Funktionen. was du da hast sind einige pfeilfunktionen von ES6 (all =>). Sie können mehr über sie auf MDN herausfinden https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions – toskv

+1

@toskv, wow, danke! – Amelina

Antwort

2

Die Notation nach Rückruf Parameter in der autocompletePerson Funktion definiert den erwarteten Typ des Parameters.

In diesem Fall bedeutet callback:(any) => voidRückruf Parameter wird erwartet, dass eine Funktion, die einen Parameter vom Typ any nehmen kann und nicht zurückgibt.

Wenn autocompletePerson aufgerufen wird, muss eine solche Funktion empfangen werden. In Ihrem Fall ist die Funktion:

res => { 
     console.log(res); 
     if(this.surname != ""){ 
      this.dialogService.GetAutocomplite("surname-face-input", this.SetArrayToAutocomplite(res)); 
     } 
     else if(this.surname == "" ){ 
      this.name = ""; 
      this.otchestvo =""; 
      this.age = ""; 
     } 
    } 

Hinweis: Sie den binden nicht benötigen (diese) Teil, weil Sie eine ES6 Pfeil Funktion verwenden, das Typoskript bereits so kompiliert, dass der gleiche lexikalische Kontext ist erhalten.

Was die Reihenfolge der Anrufe ist es diese:

  1. autocompletePerson
  2. this.hubSignalRProxy.invoke
  3. getan // höchstwahrscheinlich später asynchron abgeschlossen
  4. Rückruf (res) // die Funktion empfangen als Parameter
  5. alles im Rückruf