回调函数如何在ts中起作用?

时间:2016-06-29 08:14:38

标签: typescript

美好的一天。我是ts的新手,无法理解回调函数在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);
        });

第一个排队:是为callback:(any) => void制作的参数(res => { }

第二个:首先res => { }autocompletePerson(callback:(any) => void, personCard:any)的主体是什么?

第三:代码的哪一部分等待另一部分完成(resautocompletePerson)?

1 个答案:

答案 0 :(得分:2)

autocompletePerson 函数中的回调参数后面的符号定义了参数的预期类型。

在这种情况下,callback:(any) => void表示回调参数应该是一个可以接受任何类型的参数且不返回的函数。

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)部分,因为您正在使用ES6箭头函数,即打字稿已经编译,以便保留相同的词汇上下文。

至于电话的顺序是这样的:

  1. autocompletePerson
  2. this.hubSignalRProxy.invoke
  3. 完成//很可能后来异步完成
  4. callback(res)//作为参数收到的函数
  5. 回调中的所有内容