【发布时间】:2020-09-30 08:14:20
【问题描述】:
当页面加载时,我想获取页面状态和登录的员工,以便可以使用信息来根据给定数据提取所有订单。问题是,无论我似乎在做什么功能:loadLoggedUser() 太迟返回活跃员工。我的 'console.log()' 函数目前在页面加载时会产生这个输出:
resolve one: undefined
resolve two: 3
id when needed: undefined
data: 1
这是组件中的函数,我想要实现的期望顺序是:loadLoggedUser() 然后 loadSelectedStatus() 然后一旦两者都完成了 if 语句,就可以根据从另一个收集的信息决定触发哪个函数两个功能。
export class OrdersComponent implements OnInit {
activeUser = new Employee();
constructor( public user: Employee ) {}
ngOnInit(): void {
this.initializePageData();
}
public initializePageData() {
var self = this;
this.loadLoggedUser()
.then(function(resolve) {
console.log(`resolve one: ${resolve}`);
self.loadSelectedStatus()
.then(function(resolve) {
console.log(`resolve two: ${resolve}`);
console.log(self.activeUser.id);
if (self.selectedViewNumber == 2) {
self.loadOrdersBySalesperson(self.activeUser.id);
} else {
if (self.selectedViewNumber == 3) {
self.loadOrdersByStatus(self.selectedStatus, 0);
} else {
self.loadOrdersByStatus(self.selectedStatus, self.activeUser.id);
}
}
})
});
}
这些是 initizlizePageData() 中使用的函数的四个函数定义:
public async loadLoggedUsername() {
return new Promise<string>((resolve, reject) => {
var loggedUsername = this.employeeService.getLoggedUsername();
resolve(loggedUsername);
});
}
public async loadLoggedUser() {
var self = this;
this.loadLoggedUsername().then(function(res) {
var loggedUsername = res;
return new Promise<any>((resolve, reject) => {
self.employeeService.getEmployeeByUsername(loggedUsername).subscribe(data => {
self.activeUser = data;
console.log(`data: ${data.id}`);
resolve(data.id);
});
});
});
}
public async loadSelectedStatus() {
return new Promise<number>((resolve, reject) => {
this.activatedRoute.queryParams.subscribe(params => {
this.selectedStatus = params['status'];
if (!this.selectedStatus) {
this.selectedStatus = 3;
}
resolve(this.selectedStatus);
});
});
}
public loadOrdersByStatus(selectedStatus: number, userId: number) {
this.orderService.getOrdersByStatus(selectedStatus, userId).subscribe(res => {
this.ordersArray = res;
});
}
public loadOrdersBySalesperson(userId: number) {
this.orderService.getOrdersBySalesperson(userId).subscribe(res => {
this.ordersArray = res;
});
}
}
非常感谢任何输入或反馈。
【问题讨论】:
标签: angular typescript promise async-await