1つの観測値が実行されると、別の観測から得られるデータに依存しないため、この依存関係を正しく処理する方法を考えることができません。アレイ他のデータに依存している場合に観測値を扱う場合
他の観察可能なAPIからの応答を取得し、idをだすべてのレコードを除外することを意図している加入することによって:観測可能
一つはFirebaseから、それがnovelsReadと呼ばれる単純な数値の配列を作成し、サブスクライブしてデータを取得しますnovelsRead []に存在します。
Firebaseがまだ応答していないため、apiからの応答が返されたとき、novelsRead []はまだ空です。したがって、apiの応答から何もフィルタリングされません。以下
コード:
エクスポートクラスのホームページ{
currentnovels: any;
novels: any;
unreadnovels: any;
nextnovels: any;
novel: any;
resultsPageNumber: number = 1;
novelFullPosterPath: any;
novelsread: Array<number> = [];
private basePosterUrlMedium = 'http://image.novels.org/t/p/w500';
private basePosterUrlSmall = 'http://image.novels.org/t/p/w185';
constructor(private http: Http,
private novelsApi: NovelsApiService,
private dataService: DataService,
) {
//this takes data from Firebase and pushes it to simple array of ids (numbers)
this.dataService.list('novels-read')
.subscribe(data => {
data.map(results => {
this.novelsread.push(results.novelsId);
})
})
}
ngAfterViewInit() {
this.novelsApi.getnovelsByPage(this.resultsPageNumber)
.subscribe(data => {
this.novels = data.results;
this.novels.map(data => {
data.full_poster_path = this.basePosterUrlMedium + data.poster_path;
return data;
})
.filter(data => {
let found = this.novelsread.indexOf(data.id);
//It seems when the api responds, this.novelsRead is still empty [] because Firebase has not responded yet
console.log("this novelsread[0] is ", this.novelsread[0]);
console.log("data.id found is ", found);
return data;
})
})
}
私は、イベント、または観察可能な鎖またはngAfterViewInitにコンストラクタから関数を移動するなどの他の提案を使っているかどうかをクリーンな解決策を探していますし、逆に。
私はcombineLatestを使ってオブザーバブルを組み合わせるためのコード例を見ましたが、非常に畳み込まれた構文を見つけ出し、イベントを待つことが必要な場合でも、必要なものを取り除くクリーンな方法があるかどうか疑問に思っていました。
を使用していただきありがとうございます。正確に私が必要としたもの。 –