Angular2链http请求

时间:2018-03-26 23:18:37

标签: angular http observable

我要做2个http请求。第一个http请求返回url列表和一些字符串。然后我需要在这个url上发出另一个http请求以获取anther数据,并使用我从第一个http请求获得的字符串附加此数据。

我应该如何在angularJs2中执行此操作

现在我可以使用observable发出第一个http请求,但我仍然遇到了第二个http请求。

我一直在研究observables,flatmap和mergemap,但我对angular2和observable都不熟悉,这有点混乱。

所以我的问题是将这两个请求链接起来的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这个答案并非针对Angular,而是主要展示了如何将Reactive运算符链接在一起以获得所需内容。您可以执行以下操作(警告:未经测试的代码):

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switch';

export class Foo {
    bar() {
        const httpClient: HttpClient = /* Your HTTP client here */;
        httpClient
            .get<UrlAndString[]>('first url')
            .map(urlsAndStrings => {
                const parameter = doSomethingWithUrlsAndStrings(urlsAndStrings);
                return httpClient
                    .get<SecondResult>(`second url?param=${parameter}`)
                    .map(secondResult => { return [urlsAndStrings, secondResult]; });
            })
            .switch()
            .subscribe(tuple => {
                console.log(tuple[0]); // The urls and strings, of type UrlAndString[].
                console.log(tuple[1]); // The second result, of type SecondResult.
            });
    }
}

import语句会引入mapswitch运算符,以便您可以将它们链接起来。

map会在事件发生时对其进行转换,因此您可以看到,当第一个.get()返回某个内容时,它会映射到另一个Observable<T>。因此,第一个map函数的类型签名将为map<UrlAndString[], Observable<[UrlAndString[], SecondResult]>>。这意味着它将返回发布Observable<Observable<[UrlAndString[], SecondResult]>>的{​​{1}}或Observable,其中Observable发布UrlAndString[]SecondResult类型的元组。

switch需要Observable<Observable<T>>并将其转换为Observable<T>。我上面链接的文档比我更好地解释了它。但是您可以看到.switch()的返回类型为Observable<[UrlAndString[], SecondResult]>

您可能已经熟悉.subscribe()