在此之前,我使用Firebase作为数据库服务,所以当我从firebase获取Observable并将其加载到它时
const projectsFromDatabase = this.afDB.list(this.basePath, {
query: query
});
console.log(projectsFromDatabse.subscribe(res => {console.log(res)}); // just for testing
return projectsFromDatabse;
我有这样的事情:
[
{
0:
{data: 0, value : 0, $key: ABC}
},
{
1:
{data:1, value:1 , $key: DEF}
}
]
现在我从firebase搬到了mongodb。所以我从api那里得到了一个可观察的结果:
const projectsFromDatabase = this
.http
.get(url)
.map(res => {
return res;
});
console.log(projectsFromDatabse.subscribe(res => {console.log(res)}); // just for testing
return projectsFromDatabse;
并获得完全不同的东西
[
{
0:
{
ABC:{data: 0, value : 0},
DEF:{data: 1, value : 1}
}
}
]
无论如何我可以编辑第二个observable变成类似第一个observable的东西,这样我以后可以订阅它并获得相同的结果 我试图订阅它,改变它,然后推送到一个新的可观察量但是我的可观察长度在那之后总是为0,或者不管怎么说?
答案 0 :(得分:1)
您需要做的是使用.map
,与您拨打http
时的操作类似。
在下面的例子中,我在响应对象中添加了一个新属性,我们从服务器收到该属性。 同样,您可以在将其呈现给用户界面之前修改从服务器获得的响应。我试图让我尽可能地生活,所以我使用了一个实时API。我希望你能实现实施的想法
import { Injectable } from "@angular/core";
import { Observable,BehaviorSubject } from "rxjs";
import { HttpClient } from "@angular/common/http";
import { map, filter, catchError, mergeMap } from 'rxjs/operators';
@Injectable()
export class DecoratorService {
constructor(private http: HttpClient){}
getData(): Observable<any>{
return this.http.get('https://api.github.com/users/seeschweiler')
.pipe(map(d => this.modify(d)));
}
modify(data){
data['myOwnProperty'] = "Hey There, I am added by decorator !!"
return data;
}
}