我正在尝试从Angular服务返回任务列表,该服务从宁静的.NET API获取数据。该API返回正确的数据,但是当console.log订阅的函数的结果只是未定义时。请帮助!
以下是正确运行的API方法:TaskController.cs
[HttpGet, Route("")]
public IEnumerable<GetAllTasksAndInfoDto> GetAll()
{
IEnumerable<GetAllTasksAndInfoDto> tasks = _taskRepository.GetAllTasksAndInfo();
return tasks;
}
我在task.service.ts上有两个服务,在email-notification.service.ts上有一个服务。任务是返回集合中的所有任务。电子邮件通知是从任务服务中检索任务,然后遍历它们以检查任务数据中特定属性值。
这里是task.service.ts中的方法:
export class TaskService {
constructor(private http: HttpClient, private messageService: MessageService) {}
getTasks(): Observable<getAllTasksAndInfo[]> {
return this.http.get<getAllTasksAndInfo[]>(http://localhost:xxxxx/api/task)
.pipe(
tap(_=>this.log('fetched tasks')),
catchError(this.handleError<getAllTasksAndInfo[]>('getTasks', [])));
}
我不确定如何在此^点检查数据,但未显示错误。
这是电子邮件通知中返回“未定义”的代码:
export class EmailNotificationService{
tasks: getAllTasksAndInfo[];
constructor(private http: HttpClient, private messageService: MessageService, public taskService: TaskService)
{
this.getTasks().subscribe(result => this.tasks = result);
}
getTasks(): Observable<getAllTasksAndInfo[]>{
return this.taskService.getTasks();
}
this.tasks.forEach((task) => {
console.log(`task: ${JSON.stringify(task)}`);
}
});
这里,我在尝试遍历未定义的对象时在控制台中遇到错误。
这是我的打字稿课:
export class getAllTasksAndInfo {
taskId: number;
stepName: string;
officeName: string;
csrName: string;
taskType: string;
daysActive: number;
}
这是我的API类:
public class GetAllTasksAndInfoDto
{
public int taskId { get; set; }
public string stepName { get; set; }
public string officeName { get; set; }
public string csrName { get; set; }
public string taskType { get; set; }
public int daysActive { get; set; }
}
任何帮助表示赞赏。谢谢!
可能是因为您尚未订阅Observable或任务数组的初始数据被预置为未定义
您曾尝试使用rxjs订阅您的EmailNotificationService中的可观察对象,有时它可能未定义,因为未定义数组的初始值开始可能是将其设置为空数组,这可能会有帮助
private tasks: getAllTasksAndInfo[] = [];
constructor(private http: HttpClient, private messageService: MessageService, public taskService: TaskService)
{
this.tasks = this.getTasks();
}
getTasks() {
this.taskService.getTasks().subscribe((tasks: getAllTasksAndInfo[]) => {
console.log(tasks);
return tasks;
});
}