rxjs过滤器在错误条件下不会返回任何内容

时间:2018-08-16 10:14:56

标签: javascript rxjs observable

我编写了以下代码:

from(getState().servers)
.filter(server => server.apps.length == 0)
.take(1)
.mergeMap(element => element.length === 0 ? atLeastOneApp : of(element))
.mergeMap(server => of(server.key))
.subscribe(
    (key) =>  dispatch({
                type:ADD_APP,
                payload:{
                 key,
                 appName
                }
             }),
    (err) => console.log(err)
);


const atLeastOneApp = from(getState().servers)
.filter(server => server.apps.length == 1)
.take(1);

仅需过滤运行零个/一个应用的元素。 问题在于,在第一个过滤器中,如果server.apps.length不为零,则不会产生任何结果(我期望nullundefined[]尝试可以在控制台上打印但没有任何变化)。

如何解决此代码?我也尝试过takeWhile运算符,但没有任何改变。

谢谢

1 个答案:

答案 0 :(得分:1)

RxJS的filter过滤掉管道中的值,因此,如果server.apps.length != 0的值不会进一步“移至” take(1),然后移至subscribe()

您可以使用map(server => server.apps.length == 0? server: null)

EDIT:subscribe()不采用第二个函数属性。要捕获错误,请在管道中使用RxJS的运算符catchError()