我在一个角6组件中有两个订阅。现在,我想在这两个订阅到达onComplete后立即启动一个方法。
我要怎么做才是最简单的方法?
发布于 2018-09-13 14:39:34
使用forkJoin。一旦所有给定的观测数据完成,它就会发出。
发布于 2018-09-13 14:52:43
一旦两者都完成了,您可以使用forkJoin来等待这两种情况,然后按照通常对可观察到的情况进行订阅。
就像这样
import { Component } from '@angular/core';
import { forkJoin, Observable } from 'rxjs'
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
constructor(){
forkJoin([this.observableTest(2000), this.observableTest(3000)])
.subscribe(data => {
this.runMeAfter(data)
})
}
runMeAfter(data){
alert('yeahhh done with data, check your console for data')
console.log(data)
}
observableTest(delay){
return Observable.create(observer => {
setTimeout(() => {
observer.next("data to send can be object or anything");
console.log("am done");
observer.complete(); // to show we are done with our processing
}, delay);
})
}
}一旦处理完这两个异步代码,runMeAfter就会被调用。
Stackblitz演示:https://stackblitz.com/edit/angular-forkjoin-theo
发布于 2019-05-30 14:58:53
我们可以使用merge操作符,它允许我们并行地订阅多个可观测值。
const stream1$ = of (1,2,3);
const stream2$ = of (4,5,6);
const result$ = merge(stream1$, stream2$);
result$.subscribe(
// value
(val) => {console.log(val) },
// error
(err) => { console.log(err) },
//on complete
()=>{console.log('completed') });https://stackoverflow.com/questions/52316084
复制相似问题