私はAngular 2とGeoFireを使用して、近くの専門家を表示しています。 GeoFireを使用してプロフェッショナルのリストを観測するサービスを作成しましたが、そのリストを取得してから表示するまでにかなりの遅延があります。閲覧結果がブラウザに表示され、結果が表示されるまでに時間差が生じていますか?
これは私のサービスの専門家を取得するための私の方法です:
import { Component } from '@angular/core';
import { LocationService } from '../../core/location.service';
import { Observable, Observer } from 'rxjs';
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.css']
})
export class TestComponent {
mapCenter = [34.021256, -118.403630];
searchRadius = 4;
result;
error;
time;
constructor(private locationService: LocationService) {
const startTime = Date.now();
this.locationService.getGeoQuery({ center: this.mapCenter, radius: this.searchRadius });
this.locationService.getKeysFromGeoQuery()
.subscribe(keys => {
this.result = keys;
console.log("keys: ", this.result);
this.time = Date.now() - startTime;
console.log("time: ", this.time);
});
}
}
がtest.component.html:
<p>Result: {{result}} </p>
<p>Time: {{time}} </p>
<p>Error: {{error}} </p>
public getKeysFromGeoQuery(): Observable<any> {
var keys = new Array();
return Observable.create(observer => {
this.geoQuery.on("key_entered", (key, location, distance) => {
keys.push(key);
observer.next(keys);
});
this.geoQuery.on("key_exited", (key, location, distance) => {
var index = keys.indexOf(key);
if (index > -1) {
keys.splice(index, 1);
}
observer.next(keys);
});
});
}
これは、サービスを利用するために私のテストコンポーネントです
私のコンソールには、500ms以内に取得されたキーが表示されます。ただし、ブラウザは3〜4秒後まで結果を表示しません。誰もがこの遅延の原因を知っていますか? Screen and console
ありがとうございました!それは私の問題を完全に解決しました。私がzone.jsを読む必要があるように見える – RedFour
解決策は、私のすべての 'subscribe'と' then'節に 'this.changeDetectorRef.detectChanges();'を追加するようです。 zone.jsの前にロードされていると言うと、それを変更する方法はありますか?依存関係の順序が異なるようにpackage.jsonを変更する必要がありますか? – RedFour
ビルドプロセスのすべての詳細を提供する必要があります。私があなたの状況にあったなら、使用しているツールやFirebase、zone.jsなどを検索します。 – cartant