可观察的forkjoin订阅类型

Jor*_*ola 10 observable rxjs typescript angular

我正在使用类型化响应进行2次API请求调用,将它们组合成一个Observable.forkJoin,我希望将两个结果都放在不同的类型变量中.

var observableOrganization: Observable<Organization> = this.getOrganizationDetails();
var observablePromotion: Observable<Promotion[]> = this.getPromotions();

Observable.forkJoin([ observableOrganization, observablePromotion])
    .subscribe(
        response => {
            organization: Organization = response[0];
            promotions: Promotion[] = response[1];
        },
        error => {
            // ...
        }
    );
Run Code Online (Sandbox Code Playgroud)

如何在单个订阅响应中获得键入的结果?我希望它有所帮助,谢谢你!

ale*_*nko 15

使用es6解构也可以添加类型,如果他们不自动分配

 Observable.forkJoin([ observableOrganization, observablePromotion])
        .subscribe([org, prom]: [Organization, Promotion[]]) => {
            organization:Organization = org;
            promotions: Promotions[] = prom
        },
        error => {
            //error here
        });
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的帮助,但我无法进行编译:.subscribe([response1,prom]:[Organization,Promotion []])=&gt; {}); (2认同)

sla*_*dan 6

forkJoin当请求显式声明为ObservalbleInput.

我个人更喜欢这种语法,使用破坏性语言功能:

const requests: [ObservableInput<Organization>, ObservableInput<Promotion[]>] = [observableOrganization, observablePromotion];
Observable.forkJoin(requests)
    .subscribe(
        ([organization, promotions]: [Organization, Promotion[]]) => {
            // use organization and promotions here
        },
        error => {
            // ...
        }
    );
Run Code Online (Sandbox Code Playgroud)