从REST API返回值的Angular 10方法



问题摘要: Angular方法在返回值

之前不会等到从REST调用接收到响应。问题描述:

  1. 我有一个端点,它一旦被消费就从数据库返回一个日期。我打算在Angular中写一个通用的方法(我已经在一个provider服务中创建了一个方法),每次被任何组件调用时,都会执行这个REST调用,并返回响应的日期。下面是GET REST调用
  2. 的方法
getDateFromDb() {    
return this.httpClient.get(this.host + "/api/get-date"); 
}
  1. 下面是调用getDateFromDb()方法的提供者服务中的方法,应该从响应
  2. 返回日期
async fetchDate() {
await this.rest_service.getDateFromDb().subscribe((response: any) => {
if(response)
return response.date;
}, error => {
this._alert.alertError('Error occurred');
});
}
  1. 我尝试了async/await, promises, observables,但找不到可行的解决方案。如果执行中有任何问题,请告诉我。

  2. 我也不能使用局部变量因为这个fetchDate()方法是在提供商服务中,而不是在组件中。所以不能用这样的东西

async fetchDate() {
await this.rest_service.getDateFromDb().subscribe((response: any) => {
if(response)
this.date = response.date; //Cant' do
}, error => {
this._alert.alertError('Error occurred');
});
}
  1. 我希望能够在任何组件中调用fetchDate()方法并分配值。如
this.date = this._provider_service.fetchDate(); //Inside component A

let obj = { //Inside component B
foo: //some default value
date: this._provider_service.fetchDate();
}

我认为你把事情弄得太复杂了。在你的组件上试试

//你需要为getDateFromDb导入服务

getDateFromDb().subscribe((response: any) => {
//or whatever you need. this way assignment will be made when response is received by the component
this.date = response.date
})

要做到这一点,必须使用承诺。

调用实际API的方法

getDateFromDb() {    
return this.httpClient.get(this.host + "/api/get-date"); 
}

provider

中的方法
fetchDate(): Promise<Object> {
return this.rest_service.getDateFromDb();
}

其他调用fetchDate()方法的组件必须使用。then()在其中编写依赖代码。

this._provider_service.fetchDate().then((data: any) => {
if(data) {
this.date = data;
}
}); //Inside component A

foo() {
this._provider_service.fetchDate().then((data: any) => {
if(data) {
let obj = { //Inside component B
foo: //some default value,
date: data,
}
}
})
}

最新更新