0

我正在尝试从 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; }
}

任何帮助表示赞赏。谢谢!

4

1 回答 1

0

这可能是因为您没有订阅 Observable 或者任务数组的初始数据预设为未定义

您是否尝试过使用 rxjs 在您的 EmailNotificationService 中订阅您的 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;
  });
}
于 2019-11-04T19:11:48.213 回答