Rxjsconcat

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 中的数据

 
原文地址:https://www.cnblogs.com/wyjblog/p/15561266.html