清理嵌套的RxJS可观察订阅

时间:2017-09-10 15:20:42

标签: javascript rxjs observable

问题:

在我的Angular 2应用程序中,有几层REST API调用的嵌套订阅返回了observable。删除嵌套的最佳方法是什么?

背景:

我需要计算工作技能与用户所有工作技能之间的相似性。然后我需要将相似性百分比保存到相应的匹配文档中。用户和比赛之间存在一对多的关系。此外,工作和比赛之间存在一对多的关系。要更新匹配,我需要先找到ID。

代码:

// Makes a GET request to '/api/jobs'
this.jobService.getJobs().subscribe((jobs: Job[]) => {
  for (let job of jobs) {

    // Determine the similarity between a job's skills and the user's skills
    let percentage = this.calculatePercentage(job.skills, this.currentUser.skills)

    // Makes a GET request to '/api/matches/?jobId=12345&userId=11111'
    this.matchService.getMatchForUserAndJob(job._id, this.currentUser._id).subscribe((match: Match) => {

      // Makes a PATCH request to '/api/matches/54321'
      this.matchService.updateMatchPercentage(match._id, percentage).subscribe()
    })
  }
})

示例模式:

作业

{
    '_id': 12345,
    'skills': [
        { 'name': 'Skill 1' },
        { 'name': 'Skill 2' }
    ]
}

匹配

{
    '_id': 54321,
    'jobId': 12345,
    'userId': 11111,
    'percentage': 100
}

进一步的问题:

flatMap是否可以在这种情况下起作用?

有更好的方法来更新比赛吗?

0 个答案:

没有答案