Javascript 最后,rxjs序列在第一个错误时执行

Javascript 最后,rxjs序列在第一个错误时执行,javascript,sequence,rxjs,observable,Javascript,Sequence,Rxjs,Observable,我尝试在一个可观察的http调用序列上执行finally语句 finally方法在第一个错误时执行,而不是在完成整个序列时执行 deleteLeistungsTarife( leistungsTarife: Shopeinstellungen.LeistungsTarif[], leistungstarifGeloeschtCallback: (leistungsTarif: Shopeinstellungen.LeistungsTarif) => any) { l

我尝试在一个可观察的http调用序列上执行finally语句

finally方法在第一个错误时执行,而不是在完成整个序列时执行

deleteLeistungsTarife(
    leistungsTarife: Shopeinstellungen.LeistungsTarif[],
    leistungstarifGeloeschtCallback: (leistungsTarif: Shopeinstellungen.LeistungsTarif) => any) {
    let observerListe: Observable<number>[] = [];
    leistungsTarife.forEach((lt) => observerListe.push(
        this.http.delete(this._leistungenUrl + '/DeleteLeistungsTarif/' + lt.tarifLeistungId)
            .map(res => leistungstarifGeloeschtCallback(lt))
            .catch(this.handleError)                
    ));
    return Observable.forkJoin(observerListe).finally(()=>console.log("finally"));
}
即使没有错误,在第一次观察完成后,最终和完整的控制台日志也会被命中:/


是否有替代功能?

这是
finally
功能的预期和记录行为。检查一下

在源可观察序列正常或异常终止后调用指定的操作

同样根据Rxjs语法,一个可观察对象只能发出一个错误,这意味着:

发送到Observer对象实例的消息遵循以下语法:onNext*(onCompleted | onError)

此语法允许可观察序列向订阅的观察者实例发送任意数量(0或更多)的onNext消息,然后可选地发送一条成功(未完成)或失败(onError)消息

指示可观测序列已完成的单个消息确保可观测序列的使用者可以确定地确定执行清理操作是安全的

单个故障进一步确保可以为处理多个可观察序列的操作员维护中止语义

要仅在完成可观察项时调用函数,可以使用两种主要技术:

  • 用于将
    onNext
    onError
    onCompleted
    视为常规值(和
    非物质化
    以恢复正常行为)
然而,就你的具体情况而言,我认为方法是:

  • 捕获错误,并用错误代码替换错误(即,不要抛出或强制终止流,返回封装错误的值)。这样,源代码将正常完成,
    forkJoin
我看不到处理程序的代码,但我想它可能会终止其可观察性?如果是这种情况,您可以返回一个错误代码,并在调用完成后使用的
resultSelector
参数分析所有调用的值

    this._leistungenService.deleteLeistungsTarife(
        zuLoeschendeTarife, leistungsTarif => {
            console.log("gespeichert: ", leistungsTarif)
        }
    ).subscribe(
        (r) => console.log("liste result:", r),
        (e) => console.log("liste error:", e),
        () => console.log("complete")
    )