Estoy lidiando con la forma en que funciona mi array.push() mientras realizo solicitudes de API paginadas en Node.JS.
Mi API da 10 resultados por solicitud de forma predeterminada. La API proporciona una URL 'siguiente' en el encabezado del enlace si hay más registros para recuperar. Así que estoy usando parse-link-header NPM para obtener este nuevo enlace y realizar solicitudes posteriores en un ciclo do while.
Mi código realiza todas las solicitudes necesarias de envío de tareas para un estudiante, para cada curso en el que está inscrito.
Por ejemplo, el estudiante está matriculado en 3 cursos. Y aquí están:
Debería obtener matrices 3x con la cantidad de elementos en la matriz === la cantidad de tareas en ese curso. P.ej:
//course 1 ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s'] //course 2 ['a','b','c','d','e','f','g','h','i','j','k','l'] //course 3 []Pero para cada solicitud que se realiza, la divide en 10 registros por matriz (hasta que no hay una página 'siguiente').
Entonces, en cambio, las matrices se ven así cuando se devuelven (simplificado, por ejemplo):
//course 1 ['a','b','c','d','e','f','g','h','i','j'] ['k','l','m','n','o','p','q','r','s'] //course 2 ['a','b','c','d','e','f','g','h','i','j'] ['k','l'] //course 3 []Sé que solo estoy haciendo algo tonto, pero actualmente no puedo resolverlo.
Mi código:
async function getAssignments(courses, student){ //array to hold student assignment submissions const subs = []; let req; let parsed; for (var i=0; i<courses.length; i++){ let url = `https://${auths.canvas.domain}/api/v1/courses/${courses[i].id}/students/submissions?student_ids[]=${student}&include[]=assignment`; do { req = await canvReq(url); subs.push(req.data); parsed = parse(req.headers.link); if (parsed.next){ url = parsed.next.url; } } while (parsed.next); } return subs; } return await getAssignments(courses, student.id);Muchas gracias por cualquier ayuda que pueda proporcionar.
subs.push(req.data) debería ser subs.push(...req.data) . El uso del operador de propagación ( ... ) empujará los elementos individuales de req.data (en lugar de la matriz de req.data como un todo) a subs .