如何编辑可观察量?

时间:2018-06-17 04:50:04

标签: angular mongodb typescript firebase observable

在此之前,我使用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,或者不管怎么说?

1 个答案:

答案 0 :(得分:1)

Check this out

您需要做的是使用.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;
  }

}