我正在努力解決我的 array.push() 在 Node.JS 中發出分頁 API 請求時的作業方式。
我的 API 默認為每個請求提供 10 個結果。如果要檢索更多記錄,API 會在鏈接標頭中提供“下一個”URL。所以我使用 parse-link-header NPM 來獲取這個新鏈接并在 do while 回圈中發出后續請求。
我的代碼為學生注冊的每門課程提出了所有必要的作業提交請求。
例如,學生注冊了 3 門課程。還有:
- 課程 #1 中的 19 個作業
- 課程 #2 中的 12 個作業
- 課程 #3 中的 0 個作業
我應該得到 3x 陣列,其中陣列中的專案數 === 該課程中的作業數。例如:
//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
[]
但是對于發出的每個請求,它將每個陣列分成 10 條記錄(直到沒有“下一頁”)。
因此,陣列在回傳時看起來像這樣(例如簡化):
//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
[]
我知道我只是在做一些愚蠢的事情,但目前無法弄清楚。
我的代碼:
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);
非常感謝您提供的任何幫助。
uj5u.com熱心網友回復:
subs.push(req.data)應該是subs.push(...req.data)。使用擴展運算子 ( ...) 會將req.data(而不是整個req.data陣列)的單個元素推送到subs.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435739.html
標籤:javascript 节点.js 数组
下一篇:披薩訂單-額外的奶酪
