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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将可选参数传递给typescript中的回调函数相关的知识,希望对你有一定的参考价值。

我有一个回调函数,它返回一些数据到组件。

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

答案

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

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

changed example

另一答案

我觉得你有点失落。

我可以自由地从未使用的代码中清除stackblitz,并向您展示如何使用回调: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)。

这就是回调的处理方式。

以上是关于如何将可选参数传递给typescript中的回调函数的主要内容,如果未能解决你的问题,请参考以下文章

定义后无法将可选参数传递给express

是否有必要在将可选参数传递给另一个可选参数之前检查它?

将可选路径参数传递给 ant

将可选参数传递给 ASP.NET API 的 GET 方法

当我将可选参数传递给视图时,为啥我的 CSS 静态文件在 Django 中不起作用?

将文本字段输入值(如果输入)作为可选参数传递给 react-redux-typescript 应用程序中的 GET api 调用