为什么 rxjs concat 在传递和数组而不是单个参数时产生不同的值?
Why does rxjs concat produce different values when passed and array instead of individual arguments?
rxjs 文档声明 concat 运算符可以接受可观察对象或数组的单个参数。当我通过个别论点时,我得到了我所期望的。从 concat 返回的 Observable 具有 Observable 中每个 Observable 的所有值,它 returns 按照它们应该的顺序排序。这是一个带有单独参数的示例,它按预期工作:
var str: string = "";
var obs1: Observable<string> = of("hello");
var obs2: Observable<string> = of("world");
concat(obs1, obs2).subscribe(
s => str += s as string + " ",
err => {},
() => str.trim()
)
运行时,str 将为 "hello world"
当我传递一个 observable 数组时,它 returns [object Object] 为每个值而不是 observable 的值。谁能告诉我这是为什么以及如何让 concat 使用数组?这是上面使用数组的示例:
var str: string = "";
var strBuild: Observable<string>[] = [];
strBuild.push(of("hello"));
strBuild.push(of("world"));
concat(strBuild).subscribe(
s => str += s as string + " ",
err => {},
() => str.trim()
)
运行时,str 将为“[object Object] [object Object]”
我在这里错过了什么?在此先感谢您的关注。
我相信 s
仍然是可观察的,因为 strBuild
是 2 Observable
的数组,而不是字符串数组的 Observable
。可能有更好的选择,但可能是订阅每个可观察对象:在 concat()
中,像这样:
concat(strBuild).subscribe(
s => s.subscribe(e => str += e + " "), //s is an Observable so we need to subscribe
err => {},
() => str.trim()
)
我只是在解释你的示例中输出不同的原因,但我确信有更好的方法来使用 Observables
构建字符串数组
rxjs 文档声明 concat 运算符可以接受可观察对象或数组的单个参数。当我通过个别论点时,我得到了我所期望的。从 concat 返回的 Observable 具有 Observable 中每个 Observable 的所有值,它 returns 按照它们应该的顺序排序。这是一个带有单独参数的示例,它按预期工作:
var str: string = "";
var obs1: Observable<string> = of("hello");
var obs2: Observable<string> = of("world");
concat(obs1, obs2).subscribe(
s => str += s as string + " ",
err => {},
() => str.trim()
)
运行时,str 将为 "hello world"
当我传递一个 observable 数组时,它 returns [object Object] 为每个值而不是 observable 的值。谁能告诉我这是为什么以及如何让 concat 使用数组?这是上面使用数组的示例:
var str: string = "";
var strBuild: Observable<string>[] = [];
strBuild.push(of("hello"));
strBuild.push(of("world"));
concat(strBuild).subscribe(
s => str += s as string + " ",
err => {},
() => str.trim()
)
运行时,str 将为“[object Object] [object Object]”
我在这里错过了什么?在此先感谢您的关注。
我相信 s
仍然是可观察的,因为 strBuild
是 2 Observable
的数组,而不是字符串数组的 Observable
。可能有更好的选择,但可能是订阅每个可观察对象:在 concat()
中,像这样:
concat(strBuild).subscribe(
s => s.subscribe(e => str += e + " "), //s is an Observable so we need to subscribe
err => {},
() => str.trim()
)
我只是在解释你的示例中输出不同的原因,但我确信有更好的方法来使用 Observables