【问题标题】:How to search multiple api services如何搜索多个api服务
【发布时间】:2017-10-02 09:58:12
【问题描述】:

我正在开发一个 angular 2 的搜索引擎。 因此,我使用来自多个平台的 API。

如果我手动从每个 api 服务调用搜索功能,它就可以工作。

但是是否可以做同样的 foreach api 服务?

每个api服务都有相同的功能:

search (query: string): Observable<Array<SearchResult>> { ... }

在 UI 中,我想用标签分隔结果。

因此每个api服务都有一个标题:

public title: string = "the title";

为了在本地存储搜索结果,我有一个由每个 api 服务扩展的类。这个类有辅助函数等。

【问题讨论】:

  • 使用foreach (let service of apiServices) --&gt; service.search()之类的东西会很酷
  • 我不知道 angular,但在 Java 中我会构建一个 Map 将标题映射到 Observable 实例...
  • 既然您想按标签显示结果,为什么不直接构建一个组件来保存标签内容并搜索其中一个 API?
  • 每个服务都有一个可观察的searchResults
  • 如果我点击搜索按钮,我想搜索每个 api。但是当我点击一个标签时,我可以看到另一个 api 的结果。

标签: api angular typescript search


【解决方案1】:

根据您需要的行为,您可以使用 mergeconcatforkJoin 将多个流合并为一个。

代码看起来几乎相同。

例如,使用 merge 将 2 个流合并为一个。

如果您有 api 列表,则需要调用搜索。您的代码将如下所示。

let apis: string[] = [];

let observables = apis.map(api => search(api)); // get an array of observables

let merged = observables.reduce((previous, current) => previous.merge(current), new EmptyObservable()); // merge all obserbable in the list into one.

merged.subscribe(res => doSomething(res));

这篇文章可能是helpful

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2020-11-11
    相关资源
    最近更新 更多