我做了这段代码:

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运算符,但没有任何变化。

谢谢

最佳答案

RxJS的filter过滤掉管道中的值,因此,如果server.apps.length != 0,该值将不会进一步“移至” take(1),然后移至“ subscribe()”。您可以使用map(server => server.apps.length == 0? server: null)

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

关于javascript - rxjs过滤器在错误条件下不返回任何内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51874641/

10-16 19:39