【发布时间】:2018-05-31 10:26:33
【问题描述】:
编辑以包含更多细节:
假设我在 Firebase 中有一个 SurveyTaker 对象的集合,在 Firebase 中有一个 SurveyTaker 对象的集合,以及一个像这样的surveyTakersBySurvey 关系设置
+-- surveyTakersBySurvey
|
+-- survey1
| |
| +-- surveyTaker1 = true
|
+-- survey2
|
+-- surveyTaker1 = true
此代码当前有效
findSurveyByState(surveyState:string): Observable<Survey> {
return this.db.list('surveys', {
query: {
orderByChild: 'state',
limitToFirst: 1,
equalTo: surveyState
}
})
.map(results => results[0]);
}
findSurveyTakerKeysPerSurveyState(surveyState:string,
query: FirebaseListFactoryOpts = {}): Observable<string[]> {
return this.findSurveyByState(surveyState)
.do(val => console.log("survey",val))
.filter(survey => !!survey)
.switchMap(survey => this.db.list(`surveyTakersBySurvey/${survey.$key}`,query))
.map( stsbs => stsbs.map(stbs => stbs.$key) );
}
我需要更改上述代码以适用于以相同状态返回的多个调查。
我正在为 rxjs 编程而苦苦挣扎……
//i first changed this to return multiple
findSurveysByState(surveyState:string): Observable<Survey[]> {
return this.db.list('surveys', {
query: {
orderByChild: 'state',
equalTo: surveyState
}
})
//.map(results => results[0]);
}
// this is the method that is not working
findSurveyTakerKeysPerSurveyState(surveyState:string,
query: FirebaseListFactoryOpts = {}): Observable<string[]> {
//need to update to take multiple Surveys
return this.findSurveysByState(surveyState)
.do(val => console.log("surveys",val))
.filter(survey => !!survey)
//.switchMap(survey => this.db.list(`surveyTakersBySurvey/${survey.$key}`,query))
// switchMap would only make sense for one at a time?
.map(surveys => surveys.map(survey => this.db.list(`surveyTakersBySurvey/${survey.$key}`, query)))
// on the below line i get [ts] Property '$key' does not exist on type 'FirebaseListObservable<any[]>'.
.map( stsbs => stsbs.map(stbs => stbs.$key) );
}
我得到一个 [未定义,未定义]
任何帮助将不胜感激。如果我需要详细说明任何重要的事情,请告诉我。我还在摸索。
编辑:this.db 来自 ... import { AngularFireDatabase } from "angularfire2/database";
【问题讨论】:
-
当你 console.log('stbss') 时,它是否已经在数组的每个元素中包含
.$key? -
它打印两个 FirebaseListObservables 的数组 ... [FirebaseListObservable, FirebaseListObservable] ...我不知道如何打印出来。
-
如果你使用的是chrome控制台,应该可以展开并看到里面的对象
-
是的,它是一个像 . 0 : FirebaseListObservable $ref : U {u: Qg, path: E, m: lf, Nc: false, then: undefined, ...} operator : ObserveOnOperator {scheduler: ZoneScheduler, delay: 0} source : FirebaseListObservable {_isScalar: false, _subscribe: ƒ, $ref: U} _isScalar : false proto : Observable
-
它似乎是与 this.db.list('foo', query) 相同的对象。 ..我只是不确定如何将它们映射到字符串数组
标签: angular typescript firebase rxjs angularfire2