angular - ForkJoin 无法从多个声明的主题中分叉可观察对象
问题描述
我有两个函数可以进行两次 HTTP 调用并保存请求返回的数据。与此同时,它还会向从这个函数返回的 Subject 的观察者发送成功响应,就像这样。
import { Observable, of, Subject} from 'rxjs';
import { first } from 'rxjs/operators';
import { HttpClient, HttpRequest } from '@angular/common/http';
export class subjectServices : : Observable<any>{
dataone : any;
constructor(private http :HttpClient){}
observableOne() : Observable<any>{
let subjectOne = new Subject<any>();
let subjectOneObserver = subjectOne.asObservable();
this.http.get('url').subcribe(data=>{
this.dataone = data;
subjectOne.next("Success");
//subjectOne.complete("Success");
// changing "next" to "complete" makes it works
})
return subjectOneObserver;
}
observableTwo() : Observable<any>{
let subjectTwo = new Subject<any>();
let subjectTwoObserver = subjectTwo.asObservable();
this.http.get('url').subcribe(data=>{
this.dataTwo = data;
subjectTwo.next("Success");
//subjectTwo.complete("Success"); //this will work
// changing "next" to "complete" makes it works
})
return subjectTwoObserver;
}
}
在我的组件中,我想同时调用这两个函数并等待它们响应我这样使用 ForkJoin
import { forkJoin, Observable } from 'rxjs';
import {subjectServices} from './subjectServices.ts'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(private SubjectServices : subjectServices){
}
callBothSubjectSimultaneously(){
let response1 = this.SubjectServices.observableOne();
let response2 = this.SubjectServices.observableTwo();
let allResponse = ForkJoin(response1, response2);
allResponse.subscribe(responseList =>{
let responseData1 = responseList[0];
let responseData2= responseList[1];
console.log("forkJoin completed")
});
}
}
尽管这两个函数都在执行服务中的 next() 语句,但 allResponse.subscribe 中的代码永远不会被触发。
我知道如果我直接在 ForkJoin 函数中提供 http 调用,这会起作用,但如果 observable 来自我已声明的主题,它会以某种方式不起作用。我不明白我做错了什么。
解决方案
推荐阅读
- javascript - 如何在 javascript 中导入 Material UI - InputLabel
- xcode - SwiftUI:更新到 beta 7 后:使用 PresentationMode 引发错误:dyld:惰性符号绑定失败
- reactjs - 如何将 react.js 添加到 spring mvc 应用程序
- suse - 从 SUSE-12 SP4 服务器连接 vncserver 时出现黑屏错误
- tsql - 在 t-sql 中执行命令后继续
- cmd - cmd回显中缺少引号
- python - 如何使用键盘和鼠标 Python 模块将用户输入(键盘、鼠标)正确存储在文件中?
- python - 已解决:为每个脚本选择不同的 python 解释器
- atom-editor - 更改 Atom 中的 config.settings 后如何刷新包?(init.coffee 脚本)
- kubernetes - 如何让 de pods 处于运行状态