typescript带参数的异步回调

编程教程 > Java (3445) 2025-01-27 10:09:47

JavaScript是一个单线程应用程序,如果我们继续将该线程用于所有任务,用户将最终等待阻碍用户体验的其他任务。为了解决这个问题,我们进行了异步编程。

TypeScript支持回调函数,使您的程序异步。回调函数是一个在一些异步处理完成后被调度的函数。回调函数作为参数传递给另一个函数,允许在异步处理完成时调用它们。
 

Angular / TypeScript中的回调

通常,callback在长时间运行的过程(例如从在线REST API获取数据)之后,您将进行函数调用。我们来看一个这种用法的例子。

employee.ts:

export class Employee {
  constructor(public id: number) {
  }
}

在服务类中,您可以创建可以接受function类型参数的方法。在处理完请求的方法完成后,它将callback使用需要传递的数据执行该函数。
app.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Employee } from '../model/employee';
import { Observable } from 'rxjs';
  
@Injectable({
  providedIn: 'root'
})
export class EmployeeService {
 
  constructor(private http: HttpClient) { }
 
  public getEmployees(callBackUpdateUIElements: function): Observable<Employee[]>
  {
    const url = 'http://localhost:3000/employees';
 
    this.http.get<Employee[]>(url)().subscribe(response =>
    {
      this.employees = response.map( item =>
      {
        return new Employee(
            item.id
        );
      });
 
      callBackUpdateUIElements(this.employees);
    });
  }
}

在组件文件中,创建callback在成功完成服务调用后需要执行的功能。
app.component.ts

import { Component } from '@angular/core';
import { EmployeeService } from './service/employee.service';
import { Employee } from './model/employee';
 
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
 
export class AppComponent {
    title = 'app';
    employees = new Array<Employee>();
 
    private callBackUpdateUIElements(employees: Employee[]) {
        this.employees = employees;
 
        //More Logic and code here
    }
 
    constructor( empService:EmployeeService ) {
        empService.getEmployees(callBackUpdateUIElements);
    }
}

在上面的场景中使用回调不是一个好方法。而是使用RxJS Observable来响应数据更改。

JavaScript中的回调

在vanilla JS代码中,回调函数以超时函数区间函数的形式存在。例如,在这段代码中,我们调用一个JavaScript函数setTimeout(),它将等待2秒,然后调用另一个名为的函数callback()

JavaScript中的回调函数

console.log("Before function call");
 
setTimeout(callback, 2000);     //Async function call through setTimeout() method
 
function callback() {
    console.log("Callback function called");
}
 
console.log("After function call");
 
//Output
 
Before function call
After function call
Callback function called    //After 2 seconds delay

评论
User Image
提示:请评论与当前内容相关的回复,广告、推广或无关内容将被删除。

相关文章
JavaScript是一个单线程应用程序,如果我们继续将该线程用于所有任务,用户将最终等待阻碍用户体验的其他任务。为了解决这个问题,我们进行了异步编程。Type
Angular HttpClient使用RxJS Observable例子,习使用Angular2  HttpClient服务从在线REST API获取数据并将其作为Observable对象/数...
javascript中onclick事件传递对象参数,javascript,javascript传递对象参数
JavaScript/JS数组清空,删除数组内所有数据。Array=[]与Array.length=0的区别
JavaScript/JS读取文本/JSON文件内容let file = files[0];var reader = new FileReader();read
Javascript/JS 复制内容到系统剪切板/粘贴板/** * 复制内容到剪切板 * @param content 文本内容 */function copy
简介 使用 JavaScript 改变 URL 参数值并且页面不刷新的方法有两种模式:使用 History replaceState使用 History pus
JavaScript正则加上/去掉cdn域名前缀,文本支持&lt;script&gtl;let $domain="https://static-project.example
​JavaScript 数学小数精确计算&lt;!DOCTYPE html&gtl; &lt;html&gtl; &lt;head&gtl; &lt;title&gtl;&lt;/tit...
JavaScript H5原生操作元素class,包括获取元素class值,设置class值修改元素class值操作。示例数据 &lt;head&gtl; &lt;meta cha
使用方法toFixed.使用案例letwidth=5.556;console.log(width.toFixed(2))输出内容:5.56使用提示,toFixed必须是数字类型,如果是字符串需要...
环境说明 dockerdocker-composemysql 5.7nacos 2.2.3 docker-compose 配置
Spring Boot 2.0 - 开发者工具devtools热部署教程(自动重载),如果你曾经在最新的UI开发框架上工作过,比如Node,angular,gulp等等,那么当你在某些代码发生变...
前言在其他编程语言中,我们可以通过划分模块,来组织庞大复杂的项目,而JS一开始并没有模块的概念,因为一开始JS的脚本就很简单。后来随着JS的发展,前端要开发的项