我试图从Angular服务返回任务列表,该服务从restful.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,或者作为任务数组的初始数据被预设为未定义的
您是否尝试过在EmailNotificationService中使用rxjs订阅您的observable?有时它可能会出现未定义的情况,因为数组的初始值一开始是未定义的。也许用空数组设置它可能有助于
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;
});
}