我做了这段代码:
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
不为零,则不会产生任何结果(我期望null
,undefined
或[]
,尝试在控制台上打印但没有任何变化) 。我该如何解决此代码?我也试过
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/