Estoy intentando devolver una lista de tareas del servicio Angular que obtiene los datos de una API de .NET tranquila. La API devuelve los datos adecuados, pero cuando console.log el resultado de la función suscrita a solo está indefinida. ¡Por favor, ayúdenme!

Aquí está el método API que funciona correctamente: TaskController.cs

[HttpGet, Route("")]
    public IEnumerable<GetAllTasksAndInfoDto> GetAll()
    {
        IEnumerable<GetAllTasksAndInfoDto> tasks = _taskRepository.GetAllTasksAndInfo();
        return tasks;
    }

Tengo dos servicios en llamado task.service.ts y uno llamado email-notification.service.ts. La tarea es devolver todas las tareas de una colección. Email-Notification es recuperar las tareas del servicio de tareas y, a continuación, recorrerlas en iteración para comprobar un valor de propiedad específico en los datos de la tarea.

Aquí está el método de 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', [])));
}

No estoy seguro de cómo comprobar los datos en este punto, pero no muestra un error.

Aquí está el código de la notificación por correo electrónico que está devolviendo "Undefined":

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)}`);
        }
    });

Aquí estoy recibiendo un error en la consola por intentar iterar a través de un objeto indefinido.

Aquí está mi clase de mecanografiado:

export class getAllTasksAndInfo {
taskId: number;
stepName: string;
officeName: string;
csrName: string;
taskType: string;
daysActive: number;

}

y aquí está mi clase 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; }
}

Cualquier ayuda apreciada. ¡Gracias!

0
tks2n 4 nov. 2019 a las 22:02

1 respuesta

Puede deberse a que no se ha suscrito a Observable o a que los datos iniciales que son la matriz tasks están predefinidos para indefinir

¿ha intentado usar rxjs para suscribirse a su observable en su EmailNotificationService a veces podría venir en undefined porque el valor inicial de la matriz es indefinido para comenzar con tal vez configurarlo con una matriz vacía podría ayudar

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;
  });
}
0
shahidfoy 4 nov. 2019 a las 19:32
58699563