私には、ドロップダウンリストのデータを返す関数を持つ角度2のサービスがあります。関数は約束を返します。以下のサービスからWebサービスの呼び出しが完了する前に、約束によるWebサービスへのAngular2呼び出しが解決されました。
コード:このデータを使用してドロップダウンが最新のデータを持つことになりますので、
getStuff(): Promise<Stuff>
{
return this.http.get("http://myserver/myServices/myService.svc/rest/getStuff")
.map(res => this.dataHandler.extractData(res)).toPromise()
.catch(err => this.dataHandler.handleHttpError(err));
}
私は、新しい保存されたデータを更新するために保存したイベントからこの関数を呼び出します。
私のコードこのサービスを呼び出す:
ngOnInit()
{
this.onSavedSubscription = this.OnSaved.subscribe((data: any) =>
{
if (data.IsSuccessful)
{
this.myService.getStuff().then(
res=>
{
this.myService.stuffs = res;
}
);
}
}
上記のコードが呼び出されると、getStuff関数が呼び出されますが、それはデータベースから更新されたデータを返すことができます前に、コードの実行は、「それから」と塗りつぶしに移行resに含まれる古いデータを持つthis.myService.stuffs。何が起こっているのか分かりません。 getStuffの実行が終了して新しいデータが返されるまで、「then」は実行されないと思いました。助けてください。
あなたは正しいことを考えていますが、約束事が解決される前にgetStuff()。then()を実行すべきではありません。 M.b.あなたはこの部分と衝突する他のコードを持っています、それは伝えにくいです。 – metamaker
コメントありがとうございました。はい、私はgetStuff()と思っていましたが、then()はgetStuffの終了後にのみ実行され、getStuffから返されるデータはgetStuff()、then()のres引数になります。これは初めての動作ですが、その後のgetStuff()。then()はgetStuff()が終了する前に実行され、resには古いデータが格納されます。 – LanceM