Javascript 如何返回一个角度可观测的数字/变量?
我有一个angular服务调用API并返回大量数据。在同一个GET调用中,我正在进行一些逻辑运算,计算每种类型有多少个。我的问题很简单,我是否可以将该变量/数字和数据一起发送回,或者将其保存到另一个变量并发送 当我试图将其作为公共变量保存到服务中时,当我试图将其拉入另一个组件时,它是未定义的。我假设是因为变量在订阅可观察对象之前被访问,但我不知道如何解决这个问题 在下面的代码中,_counts是我试图返回的内容,它在getPciInfo方法中运行良好,但正如我所说的,它在其他任何地方返回时都是未定义的。(我正在尝试将此编号传递到其他组件) 感谢您提供的任何帮助或建议Javascript 如何返回一个角度可观测的数字/变量?,javascript,angular,typescript,service,observable,Javascript,Angular,Typescript,Service,Observable,我有一个angular服务调用API并返回大量数据。在同一个GET调用中,我正在进行一些逻辑运算,计算每种类型有多少个。我的问题很简单,我是否可以将该变量/数字和数据一起发送回,或者将其保存到另一个变量并发送 当我试图将其作为公共变量保存到服务中时,当我试图将其拉入另一个组件时,它是未定义的。我假设是因为变量在订阅可观察对象之前被访问,但我不知道如何解决这个问题 在下面的代码中,_counts是我试图返回的内容,它在getPciInfo方法中运行良好,但正如我所说的,它在其他任何地方返回时都是未
public _counts: any;
getPciInfo(): Observable <Ipcidata[]> {
return this.httpClient.get<Ipcidata[]>('http://dr0-hlp-07/api/PCIMachines')
.pipe(
map(results => {
const sorted = results.sort(( a, b ) => {
const updateDateA = Date.parse(this.datepipe.transform(a.UpdatedDate, 'MM-dd-yyyy'));
const carda = determineCardType(a, this.dateMinusMonth, this.dateMinusTwoWeeks)
const cardb = determineCardType(b, this.dateMinusMonth, this.dateMinusTwoWeeks)
return cardb - carda
});
this._counts = sorted.reduce((acc, cur)=>{
const cardType = determineCardType(cur, this.dateMinusMonth, this.dateMinusTwoWeeks)
switch (cardType) {
case 1:
acc.green += 1;
break;
case 2:
acc.yellow += 1;
break;
case 3:
acc.red += 1;
break;
}
return acc;
}, {
red: 0,
green: 0,
yellow: 0
});
console.log(this._counts)
console.log(this._counts.red)
return sorted;
}
public\u计数:任意;
getPciInfo():可观察{
返回此.httpClient.get('http://dr0-hlp-07/api/PCIMachines')
.烟斗(
地图(结果=>{
常量排序=结果排序((a,b)=>{
const updateDateA=Date.parse(this.datepipe.transform(a.updatedate,'MM-dd-yyyy'));
const carda=determineCardType(a,this.dateminsMonth,this.dateminsTwoWeeks)
const cardb=determineCardType(b,this.dateminsMonth,this.dateminsTwoWeeks)
返回卡B-卡
});
此._计数=已排序.减少((acc,cur)=>{
const cardType=determineCardType(cur,this.dateminsMonth,this.dateminsTwoWeeks)
开关(卡式){
案例1:
acc.绿色+=1;
打破
案例2:
acc.黄色+=1;
打破
案例3:
acc.red+=1;
打破
}
返回acc;
}, {
红色:0,,
绿色:0,
黄色:0
});
console.log(此.\u计数)
console.log(此._counts.red)
返回排序;
}
要发回计数,您可以执行以下操作:
return ({sorted, counts: _counts});
要跨此服务的组件共享,您可以有一个主题,例如:
private countsSource = new Subject();
private counts = this.countsSource.asObservable();
getPciInfo(): Observable <Ipcidata[]> {
return this.httpClient.get<Ipcidata[]>('http://dr0-hlp-07/api/PCIMachines')
.pipe(
map(results => {
....
const counts = ...
this.countsSource.next(counts)
});
}
getCounts(): Observable<CountData> {
return this.counts;
}
如果要将计数发送到新订阅,可能必须使用
BehaviorSubject
或ReplaySubject
返回({sorted,counts:_counts})
在订阅中,您可以获得result.sorted
和result.counts
。或者,如果您想单独订阅counts
,您可以为设置一个主题。这就是我要寻找的,但是我得到了以下错误,我假设是因为我没有指定额外的变量作为返回?类型“Observable”不可分配给类型“Observable”
不确定在何处执行此操作,因为我无法在getPciInfo()中执行此操作方法没有错误。您只需将该方法的返回类型更改为Observable
,因为您不再返回Observable
。或者为Ipcidata+count创建一个iterface并将其用作返回类型。这很有效,我只是没有将其作为返回类型正确地添加到括号中,谢谢。!
this.myService.getCounts().subscribe(counts => console.log(counts));