美好的一天。我是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)
的主体是什么?
第三:代码的哪一部分等待另一部分完成(res
和autocompletePerson
)?
答案 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箭头函数,即打字稿已经编译,以便保留相同的词汇上下文。
至于电话的顺序是这样的: