concat( observable1,observable2,observable3,...,)
函数功能:
将多个可观察对象合并成一个可观察对象,调用该对象的时候,会依次调用该对象内部合并的可观察对象,当前调用的可观察对象(内部)数据完成后,继续订阅下一个可观察对象的数据。
参数:
多个可观察对象用 ‘,’分割,或者传入可观察对象数组
返回结果:
可观察对象
示例:
1 const ob1=of(1,2,3,4);
2 const ob2=from([5,6,7,8]);
3 concat(ob2,ob1).subscribe(num=>{
4 console.log(num);
5 });
上述代码中,定义两个可观察对象,通过 concat将两个可观察对象合并成一个可观察对象,并订阅该可观察对象,可以看到订阅结果按照合并顺序,依次发送出来数据,发送数据分别是:5,6,7,8,1,2,3,4。上述代码是同步完成的,下面介绍异步可观察对象合并相关知识。
// 定义 Observable promiseA
const promiseA = from(this.http.get(this.urls[0]));
// 定义 Observable promiseB
const promiseB = from(this.http.get(this.urls[1]));
// 订阅 promiseA (异步)
promiseA.subscribe(result => {
setTimeout(()=>{
console.log('start promiseA');
console.log(result);
console.log('end promiseA');
},1000)
})
// 订阅 promiseB(同步)
promiseB.subscribe(result => {
console.log('start promiseB');
console.log(result);
console.log('end promiseB');
});
上述代码中,定义了两个 Observable ,当订阅他们的时候,先订阅的是 promiseA,但是因为 promiseA 中含有异步方法,所以返回B的订阅结果,再返回A的订阅结果,程序运行结果是:
start promiseB
result
end promiseB
start promiseA
result
end promiseA
现在利用 concat进行代码合并
1 concat(promiseA,promiseB).subscribe(x=>{
2 console.log(x);
3 })
上述代码先返回 promiseA的订阅结果数据,再返回 promiseB的订阅结果数据,如果 promiseA 的数据没有完全返回过来,不会订阅 promiseB 中的数据