当前位置: 首页 > 面试题库 >

角度2:首次服务成功后,两个后端服务调用

司寇凯
2023-03-14
问题内容

在我的Angular 2应用中,我具有以下后端服务。

getUserInterests() {
    return this.http.get('http://localhost:8080/test/selections').map((res: Response) => res.json());
}

调用此服务后,我想在上一个成功的情况下调用另一个服务。

第二次服务

let params: URLSearchParams = new URLSearchParams();
    params.set('access_token', localStorage.getItem('access_token'));
    return this.http.get('http://localhost:8080/user/selections', { search: params }).map((res: Response) => res.json());

这两个服务分别返回两个JSON数组。然后,我需要使用这两个数组进行一些登录。

已编辑

服务

getUserInterests() {
    return this.http.get('http://localhost:8080/test/selections').map((res: Response) => res.json());
}

getSavedSelections() {
    let params: URLSearchParams = new URLSearchParams();
    params.set('access_token', localStorage.getItem('access_token'));
    return this.http.get('http://localhost:8080/interest/user/selections', { search: params }).map((res: Response) => res.json());
}

getSelectionList() {
    var obs = this.getUserInterests().flatMap(
        (interests) => {
            return Observable.forkJoin([
                Observable.of(interests),
                this.getSavedSelections()
            ]);
        }
    );
    return obs;
}

然后,我在其他ts文件中使用following来调用服务。

export class InterestsComponent {
  private interests;
  private saved_interests;
  constructor(private dataService: DataService) {
    this.dataService.getSelectionList().subscribe(
        (result) => {
            var interests = result[0];
            var selections = result[1];
        }
    );
  }
}

但这会在控制台日志上出现以下错误。

ORIGINAL EXCEPTION: TypeError: this.dataService.getSelectionList is not a function

任何建议表示赞赏。


问题答案:

您需要利用flatMap操作员在前一个请求完成后调用一个请求:

this.service.getUserInterests().flatMap(
  (interests) => {
    let params: URLSearchParams = new URLSearchParams();
    params.set('access_token', localStorage.getItem('access_token'));
    return this.http.get('http://localhost:8080/user/selections', {
      search: params
    }).map((res: Response) => res.json());
  }
);

订阅此数据流时,您只会收到最后一个请求的结果。

您可以使用该Observable.forkJoin方法返回两者。这是一个示例:

var obs = this.service.getUserInterests().flatMap(
  (interests) => {
    return Observable.forkJoin([
      Observable.of(interests),
      this.service.getUserSelections()
    ]);
  }
);

obs.subscribe(
  (result) => {
    var interests = result[0];
    var selections = result[1];
  }
);


 类似资料:
  • 目录 1.搭建.net开发环境 1.1下载安装iis7.0,下载安装vs2015,配置IIS 1.2下载开发工具 1.3开发工具介绍 1.4设置开发工具 1.5开启服务和打开数据库 2.运行开发案例 2.1设置开发工具的编译路径 2.2编译UI资源 2.3拷贝UI资源到发布路径下 2.4打开IIS启动网页 2.5在开发工具里启动tomcat,运行案例 3.建立数据库和库表 3.1建立数据库 3.2

  • 关于处理程序,我读过,它们不存在很长时间的延迟,并将在系统重新启动后终止。所以他们不适合我的任务。 但是AlarmManager似乎是解决这个问题的一个很好的候选者,因为在允许的情况下,它们甚至在系统重启后仍然存在,并且可以重新运行应用程序。但是在Android文档中,警报管理器是用于必须在特定时间运行的任务(比如闹钟)。但我的任务每分钟都要执行。 然后是后台服务。这是更多的任务,如在后台下载,因

  • 我正在开发一个连接到BLE设备的Android应用程序,设备大部分时间都在连接,我能够捕捉读数。但是在许多连接断开之后,蓝牙打开/关闭,我的类方法 它返回null,因此我无法执行下一步。请帮我找出问题。

  • 目录 1.自定义Action 2.自定义一个php文件 3.php文件接收参数并返回值 4.UI如何调用testerp.service.m服务 5.查看运行结果 参考文档WeX5平台PHP开发 使用说明文档 php如何调用后端服务 1.自定义Action 在服务文件里,点击新增,然后输入名称 点参数列表的新增,新增2个参数,这个两个参数是从前台往后台传的。这样我们服务里就有了3个Action 2.

  • 我想创建一个小应用程序,在后台记录数据。所以我试着用绑定服务。这很好,但如果我关闭应用程序,服务也会停止。< br >那么,我的问题是:使用即时服务来执行这一操作是不是一个好方法?当应用程序关闭时,我如何保持服务在后台运行(我也想在启动后启动它)?

  • 买家如何申请售后服务? 1、功能路径 个人中心-我的订单-已完成-申请售后 2、操作流程 1、进入个人中心,找到订单 2、点击详情,进入订单详情页 3、点击申请售后,填写退款信息 4、提交 流程如下图: 5、买家填写相关处理方式、退款原因、退款金额、备注等信息后提交。 6、商家处理售后申请,打开后台-订单-售后服务 售后服务的列表显示项为商品信息、商品清单、订单金额、收货信息、买家、交易状态、操作