如何将可选参数传递给TypeScript中的回调函数

时间:2018-09-05 07:57:44

标签: javascript angular typescript callback arguments

我有一个回调函数,该函数将一些数据返回给组件。

export class AppComponent {
  constructor(
    private service: AppService
  ) {
    this.processSomething(true);
    this.processSomething(false);
  }

  private processSomething(isZoom: boolean = false) {
    this.service.handleAsyncResponses(
      this,
      this.processDataReceived
    );
  }

  private processDataReceived(
    attributeValueList: any,
    isZoom?: boolean
  ) {
    console.log("isZoom:", isZoom);
  }
}

我需要从组件发送一些值isZoom参数,并在console.log("isZoom:", isZoom)中访问它。现在console.log是未定义的loggin。

此处是一个工作示例:https://stackblitz.com/edit/angular-service-oqkfmf?file=app/app.component.ts

2 个答案:

答案 0 :(得分:2)

我认为您会迷路。

我可以自由地清除未使用的代码中的堆栈闪电,并向您展示如何使用回调:you can check it there

让我们从组件开始:

constructor(
  private service: AppService
) {
  this.processSomething(true);
  this.processSomething(false);
}

private processSomething(isZoom: boolean = false) {
  this.service.handleAsyncResponses(isZoom, this.processDataReceived);
}

private processDataReceived(isZoom: boolean) {
  console.log("isZoom:", isZoom);
}

您无需将参数定义为可选参数,因为您为isZoom值提供了默认值,因此始终可以对其进行定义。

如您所见,您不需要将完整的对象作为参数传递:可以在没有该函数的情况下调用该函数。

在您的服务中,您所剩下的就是

public handleAsyncResponses(zoom: boolean, callback: Function) {
  callback(zoom);
}

就像在任何其他上下文中一样简单地调用该函数。只需使用参数名称(此处为this.processDataReceived(zoom))重命名callback

这是处理回调的方式。

答案 1 :(得分:1)

在您的情况下,您需要将函数调用包装在本地闭包中

taskkill /im AspenPlus.exe /f

changed example