Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何转换两个不可观测数据流_Angular_Merge_Rxjs_Observable - Fatal编程技术网

Angular 如何转换两个不可观测数据流

Angular 如何转换两个不可观测数据流,angular,merge,rxjs,observable,Angular,Merge,Rxjs,Observable,我有两个可观察的可观察的 我想合并结果,例如false+false,false+true,等等 this.loaded$.pipe( merge(this.loading$) ).subscribe(console.log); //`false`,`false`; `true`,`false`; etc 然后我想根据条件将流转换为单个布尔可观测: 如果val1+val2==1-返回false;如果val1+val2!==1-返回真 因此,问题是如何转换合并的可观察对象 更新1: 绑定到使用

我有两个可观察的
可观察的

我想合并结果,例如
false+false
false+true
,等等

this.loaded$.pipe(
  merge(this.loading$)
).subscribe(console.log); //`false`,`false`; `true`,`false`; etc
然后我想根据条件将流转换为单个布尔可观测:
如果
val1+val2==1
-返回
false
;如果
val1+val2!==1
-返回

因此,问题是如何转换
合并的
可观察对象

更新1:
绑定到使用
CombineTest
但遇到问题:

combineLatest(
  this.loaded$, this.loading$,
  (val1, val2) => val1 + val2 === 1
);
[ts]运算符“+”不能应用于类型“{}”和“boolean”

更新2

.subscribe()
不存在于
CombineTest()

[ts]类型“OperatorFunction”上不存在属性“subscribe”

更新3:

我在这里找到了我问题的答案

您可以使用mapXXX操作符来实现它。 例如:


您可以使用mapXXX操作符来实现它。 例如:

[ts]类型“OperatorFunction”上不存在属性“subscribe”

当您试图将输出从布尔值转换为数字时,如果您想更改需要使用
SwitchMap
的类型,就会出现此错误,但据我所知,一次只需要一个可观察的流

因此,建议使用下面给出的
forkjoin
,这也将解决您的问题


作为其布尔结果,您应该应用逻辑运算符(&&或| |)来获取输出,而不是数字运算符

 (val1, val2) => val1 && val2 

正如您已经意识到的,您将收到两个值,即您有固定数量的请求,并且两个请求都需要完成才能获得结果,那么您应该使用


没有得到多少您想要实现的目标,但是如果您想要应用
+
,那么您应该将布尔值转换为如下所示的数字

 (val1, val2) => Number(val1) + Number(val2);
[ts]类型“OperatorFunction”上不存在属性“subscribe”

当您试图将输出从布尔值转换为数字时,如果您想更改需要使用
SwitchMap
的类型,就会出现此错误,但据我所知,一次只需要一个可观察的流

因此,建议使用下面给出的
forkjoin
,这也将解决您的问题


作为其布尔结果,您应该应用逻辑运算符(&&或| |)来获取输出,而不是数字运算符

 (val1, val2) => val1 && val2 

正如您已经意识到的,您将收到两个值,即您有固定数量的请求,并且两个请求都需要完成才能获得结果,那么您应该使用


没有得到多少您想要实现的目标,但是如果您想要应用
+
,那么您应该将布尔值转换为如下所示的数字

 (val1, val2) => Number(val1) + Number(val2);

这是行不通的,它总是只给你一个值,我需要同时得到两个值。这是行不通的,它总是只给你一个值,我需要同时得到两个值,这只是两个可观察的存储选择器(
loaded$
loading$
),不是请求,所以我真的不需要
forkJoin
这里回答是的,我需要应用
+
而不是
&&
,就像
&
&
|
我没有得到我需要的结果,只是无法使用
forkJoin
获得
示例[0]
示例[1]
未定义
转换似乎正常,但我无法订阅结果,只是更新了问题。有没有想过为什么它会返回
OperatorFunction
而不是
Observable
?@Abrkad-更新了我的fork-join部分..就像我提到的,我在这里没有做任何http请求,我已经有两个Observable,它们只是我的
存储的选择器
,实际上不需要
forkJoin
部分。这只是两个可观察的存储选择器(
loaded$
loaded$
),不是请求,所以我真的不需要
forkJoin
这里回答是的,我需要应用
+
而不是
&&
,就像
&
&
|
我没有得到我需要的结果,只是无法使用
forkJoin
获得
示例[0]
示例[1]
未定义
转换似乎正常,但我无法订阅结果,只是更新了问题。有没有想过为什么它会返回
OperatorFunction
而不是
Observable
?@Abrkad-更新了我的fork-join部分..就像我提到的,我在这里没有做任何http请求,我已经有两个Observable,它们只是我的
存储的选择器
,实际上不需要
forkJoin
部分。this.loaded$
this.loaded$
的类型是什么?看起来其中一个给了你一个不是布尔值的对象。另外,如果它是
布尔型
,最好使用
&
|
运算符
this.loaded$
this.loaded$
的类型是什么?看起来其中一个给了你一个不是布尔值的对象。此外,如果它的类型为
boolean
,则最好使用
&&
|
运算符
 (val1, val2) => Number(val1) + Number(val2);