我编写了以下代码:
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
运算符,但没有任何改变。
谢谢
答案 0 :(得分:1)
RxJS的filter
过滤掉管道中的值,因此,如果server.apps.length != 0
的值不会进一步“移至” take(1)
,然后移至subscribe()
。
您可以使用map(server => server.apps.length == 0? server: null)
EDIT: subscribe()
不采用第二个函数属性。要捕获错误,请在管道中使用RxJS的运算符catchError()
。