Asynchronous 如何在RxJs中异步抛出错误?

Asynchronous 如何在RxJs中异步抛出错误?,asynchronous,error-handling,merge,rxjs,behaviorsubject,Asynchronous,Error Handling,Merge,Rxjs,Behaviorsubject,我有一个观察员跟踪命令行界面的问题和答案。我想做的是,在代码中给定某个事件时,向观察器中注入一个错误,以便终止观察器及其下游订阅。不知道它在什么时候运行 我试着从一个主体和可观察对象的合并中抛出错误,但我似乎无法从中得到任何东西 以下是相关代码: this.errorInjector$=新主题(); .... 此.nextka$=合并( nextQa$, 这个.error.管道( 点击(():无效=>{ 抛出(新错误('stopconversation called'); }), ), ); /

我有一个观察员跟踪命令行界面的问题和答案。我想做的是,在代码中给定某个事件时,向观察器中注入一个错误,以便终止观察器及其下游订阅。不知道它在什么时候运行

我试着从一个主体和可观察对象的合并中抛出错误,但我似乎无法从中得到任何东西

以下是相关代码:

this.errorInjector$=新主题();
....
此.nextka$=合并(
nextQa$,
这个.error.管道(
点击(():无效=>{
抛出(新错误('stopconversation called');
}),
),
);
//开始对话
trace(`Starting a new conversation id'${this.uuid}'和'${this.opMessage.author.username}`);
}
getNextQa$():可观察{
返回此.nextka$;
}
stopConversation():void{
这是。下一个(
无效
);
}
this.nextQa$与本地nextQa$和errorInjector$合并。我可以确认正在调用stop conversation,并且下游正在接收此.nextQa$,但我在尝试注入错误时没有看到任何错误向下游传播。我还尝试了this.errorInjector.error()方法和map()操作符,而不是tap()。无论出于什么原因,我都无法让这两个流合并并抛出我的错误。注意:这个.nextQa$会将错误传播到下游

我觉得我遗漏了一些关于合并或主题如何工作的信息,因此任何帮助或解释都将不胜感激

编辑 我刚发现我需要一个行为主体而不是一个普通主体。我想我现在的问题是,为什么我需要一个行为主体而不是一个常规主体来抛出一个错误

编辑2
BehaviorSubject总是抛出这个错误,这不是我想要的。这是由于其初始发射的性质,但我仍然不明白为什么我不能在这段代码中对常规主题做任何事情。

问题是从我拥有的dictionary对象中使用
stopConversation():void
获取对象。此对象已定义并显示errorInjector$已定义,但调试器告诉我,当我将鼠标悬停在该值上时,errorInjector$已变得未定义。至少这就是问题所在,我可能还需要问另一个问题。

首先,如果你想让subject继续工作,你必须在发出任何错误之前订阅。因此,代码中存在订阅顺序问题。如果在创建.nextka$之后立即订阅,则不应错过错误

this.nextQa$ = merge(
            nextQa$,
            this.errorInjector$.pipe(
                tap((): void => {
                    throw (new Error('Stop Conversation called'));
                }),
            ),
        );
this.nextQa$.subscribe(console.log,console.error)

尝试使用CombineTest而不是mergeI我是按照正确的顺序进行的,但是有一个bug让我得到了一个未定义的对象,它正在调用stop conversation。我不知道为什么它没有崩溃,我对JS类不太熟悉。可能需要粘贴以帮助我们解决问题,谢谢。我会接受我的答案,但我在两天内不能接受。那么问题是,调试器上有一个对象显示为未定义,但应用程序没有崩溃。