【问题标题】:Angular 4 Observable fork Join ArrayAngular 4 Observable forkJoin 数组
【发布时间】:2018-03-30 01:13:25
【问题描述】:

我有一个关于 Angular 4 和 Observable 的快速问题。 在我的程序中,我有一个组件,它创建一个应该发送到 api 的“事物”列表。 其次,我有一个服务,它获取一个元素(“事物”-> 一个!),将其发送到 api 并返回一个 Observable。 这是代码: 组件:

saveTimers() {
    // gehe alle selektierten Timer durch und lege Sie an
    let timerSuccess = [];
    let timerFailed = [];
    let timers = [];
    for (let epgEntry of this.searchResult) {
        if (epgEntry.checked) {
            let timer = new Timer;
            // magic
            this.timerService.saveTimer(timer).
                subscribe(
                data => {
                    console.log(data);
                    if (data) {
                        timerSuccess.push(timer);
                    } else {
                        timerFailed.push(timer);
                    }
                },
                error => { this.variables.setFailure(error); }
                );
        }
        }
//both empty, because api didn´t return yet
        console.log(timerSuccess);
        console.log(timerFailed);
        if (timerSuccess.length > 0) {
            this.variables.setSuccess('Timer erfolgreich angelegt');
        }
        if (timerFailed.length > 0) {
            this.variables.setFailure('Timer konnte(n) nicht angelegt werden');
        }
    }

服务:

saveTimer(timer: Timer): Observable<boolean> {
// magic --> returns an observable
}

现在的问题是:我如何使用 Observable.forkJoin()(在组件中)一次执行所有 api 调用(顺便说一句,等待所有 api 调用)?

非常感谢!

【问题讨论】:

    标签: angular observable


    【解决方案1】:

    类似这样的:

    Observable.forkJoin(Observable.of(YOUR_ARRAY), saveTimer(timer: Timer))
        .switchMap(joined => Observable.forkjoin(http.post(joined[0]), http.post(joined[1])))
        .subscribe();
    

    在第一个 forkjoin 中,您组合了您想要发送的值。在第二个中,您将两个 api 调用的结果结合起来。

    【讨论】:

    • 好的,谢谢!但是我必须把这个放在哪里......?在组件中而不是对服务的调用?但随后 'saveTimer(timer: Timer) 将不起作用...
    猜你喜欢
    • 2021-03-27
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    相关资源
    最近更新 更多