Javascript .NET如何异步获取数据

Javascript .NET如何异步获取数据,javascript,c#,angular,typescript,Javascript,C#,Angular,Typescript,首先,我试图通过URL中给定的用户ID从数据库中获取所有项目。我正在用ngOnInit()做这件事。每个项目都有其字段语言,它是来自其他表语言的对象列表。此表中的一条记录有一个名为projectId的字段,我试图通过该字段获取每个项目的所有语言。我认为异步接收数据有问题,因为项目接收正确,但每个项目对象中的语言字段为空。我该怎么办 ngOnInit() { this.userId = this.route.snapshot.params['id']; this.getAllPro

首先,我试图通过URL中给定的用户ID从数据库中获取所有项目。我正在用ngOnInit()做这件事。每个项目都有其字段语言,它是来自其他表语言的对象列表。此表中的一条记录有一个名为projectId的字段,我试图通过该字段获取每个项目的所有语言。我认为异步接收数据有问题,因为项目接收正确,但每个项目对象中的语言字段为空。我该怎么办

ngOnInit() {
    this.userId = this.route.snapshot.params['id'];
    this.getAllProjectsByUserId(this.userId);
    this.getLanguagesByProjectId();
  }

  getAllProjectsByUserId(id: number) {  //receivng all projects for given userId
    this.portfolioAppService.getAllProjectsByUserId(id).subscribe((data) => {
      this.projectsList = data;
      console.log(this.projectsList);
    },
      error => console.error(error)
    );
  }

  getLanguagesByProjectId() {  //receiving all languages for each project
    this.projectsList.forEach(x => {
      this.portfolioAppService.getLanguagesByProjectId(x.id).subscribe((data) => {
        x.languages = data;
        console.log(this.projectsList);
      },
        error => console.error(error)
      );
    });
  }

将对
GetLanguagesByProjection()
的调用移动到收到项目时:

  getAllProjectsByUserId(id: number) {  //receiving all projects for given userId
    this.portfolioAppService.getAllProjectsByUserId(id).subscribe((data) => {
      this.projectsList = data;
      console.log(this.projectsList);
      this.getLanguagesByProjectId();
    },
      error => console.error(error)
    );
  }

否则,
此.projectsList
属性还没有所需的值。

异步意味着,您不知道数据何时到达。但你叫它,就像它会按顺序到达一样。你的第二个电话取决于第一个。但你不能确定谁先到。因此,要么嵌套订阅并在订阅中调用它们,要么使用RxJS中的合并映射。