Angular 5アプリケーションがあり、その中で重いRESTサービス(通常は数秒かかります)。アプリケーションのさまざまな部分で結果が必要です。 、したがって、結果をDataStorageServiceに保存したいと思います。
@Injectable()
export class DataStorageService {
private result: MyCustomObject;
constructor(private service: Service) {}
getResult(): MyCustomObject {
if (typeof this.result === 'undefined') {
// save result
}
return result;
}
問題は、HTTP要求が終了するまで待機してから、「結果」オブジェクトを保存して返す方法です。 PromiseとObservableも使用して解決しようとしましたが、どれもうまくいきませんでした。
観察可能:
if (typeof this.result === 'undefined') {
this.service.call()
.subscribe(response => this.result = response);
}
return this.result; // wait for save and return MyCustomObject
約束する:
if (typeof this.result === 'undefined') {
this.service.call()
.toPromise()
.then(response => this.result = response);
}
return this.result; // wait for save and return MyCustomObject
await/async
を使用してみてください
async getResult(): Promise<MyCustomObject> {
if (typeof this.result === 'undefined')
{
// save result
this.result = await this.service.call()
.toPromise()
.then(resp =>resp as MyCustomObject);//Do you own cast here
}
return this.result;
}
質問は、HTTP要求が終了するまで待機してから、「re sult」オブジェクトを保存して返す方法です
//サービス中のコード:
ServiceMethod:Observabke<any>(){
if (typeof this.result === 'undefined') {
return this.service.call().map(res=>res);
}
//これはコンポーネント内のコードです。
componentMethod(){
return this.service.ServiceMethod()
.subscribe(response => {
this.result = response;
},
()=>//handle error,
() => // call completed { return this.result; // Subscriber});
}
return this.weeklyPlayer; // MyCustomObject (This return won't wait for http to get completed. Not sure why you want multiple returns.)
}
お役に立てれば。