【发布时间】:2020-10-27 08:28:12
【问题描述】:
我的get request 没有完成,但代码的执行是连续的。因此,因变量没有被初始化。
我正在制作get request,如下所示
export class LoginComponent implements OnInit {
constructor(public dialog: MatDialog,private objdataService: dataService) { }
loginsAllRecords:any=[];
//this is calling on button click
onSubmit(form) {
this.loadLogins();
this.validate_user(form.value.name,form.value.password)
}
validate_user(username, pin)
{
var isEmail;
var isPassword;
//this is empty but after execution successfull console.log("data in load ", this.loginsAllRecords) returns data
console.log(this.loginsAllRecords)
var email = Object.values(this.loginsAllRecords).filter(x => x.email ==username)
var password = Object.values(this.loginsAllRecords).filter(x => x.pin ==pin)
}
async loadLogins() {
return await this.objdataService.getLogins_service().subscribe((data: {}) => {
this.loginsAllRecords = data;
console.log("data in load ", this.loginsAllRecords)
})
}
}
在上面的代码中,onSubmit 首先被调用,this.loginsAllRecords 应该被初始化。然后在validate_user() 中调用validate_user() 但this.loginsAllRecords null。程序执行完成后,this.loginsAllRecords 获取值并在控制台中记录数据。
这是服务类
export class dataService {
public httpOptions : any;
loginsAllRecords:any=[];
public loginUrl="http://localhost:3000/logins";
constructor(private _http : HttpClient) {
this.httpOptions = {
headers: new HttpHeaders(
{
'Content-Type': 'application/json; charset=utf-8',
})
}
}
getLogins_service(): Observable<login> {
return this._http.get<login>(this.loginUrl)
.pipe(
retry(1),
catchError(this.handleError)
)
}
// Error handling
handleError(error) {
let errorMessage = '';
if(error.error instanceof ErrorEvent) {
// Get client-side error
errorMessage = error.error.message;
} else {
// Get server-side error
errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
}
window.alert(errorMessage);
return throwError(errorMessage);
}
}
我该如何解决这个问题?
【问题讨论】:
-
我猜你是在把
asyncawait和 observables 混在一起……有什么特别的理由要使用 async await 吗? -
异步/等待与承诺一起工作。只有当您等待的异步函数返回一个 Promise 时,它们才会起作用。
-
@user1608841 - 我收到了这个错误。我做了谷歌他们建议
asyncawait,我补充说。还是同样的问题。没有这些标记也会面临同样的问题。 -
让我添加一段代码作为答案。
标签: angular typescript httprequest