我正在使用github API遍歷repo並獲取其中的所有文件的列表。這個結構被稱爲「樹」。一棵樹基本上是一個子目錄。所以如果我想看一棵樹的內容,我需要對該樹的ID作出GET請求。響應將是表示該樹中項目的對象數組。但其中一些項目也會樹木,所以我必須再次向該樹發送請求。回購可能看起來像這樣:通過github API異步遞歸獲取文件
|src
app.jsx
container.jsx
|client
index.html
readme.md
這種結構將通過以下對象來表示
[
{ name:'src', type:'tree', id:43433432 },
{ name:'readme.md', type:'md', id:45489898 }
]
//a GET req to the id of the first object would return the following array:
[
{ name:'app.jsx', type:'file', id:57473738 },
{ name:'contain.jsx', type:'file', id:748433454 },
{ name:'client', type:'tree', id:87654433 }
]
//a GET req to the id of the third object would return the following array:
[
{ name:'index.html', type:'file', id:44444422 }
]
我需要做的是寫這將返回所有文件的名稱數組功能。這變得非常棘手,因爲我試圖將異步調用與遞歸結合起來。這是迄今爲止我嘗試:
function treeRecurse(tree) {
let promArr = [];
function helper(tree) {
tree.forEach(file => {
let prom = new Promise((resolve, reject) => {
if (file.type == `tree`) {
let uri = treeTrunk + file.sha + `?access_token=${config.ACCESS_TOKEN}`;
request({ uri, method: 'GET' })
.then(res => {
let newTree = JSON.parse(res.body).tree;
resolve(helper(newTree));
});
} else resolve(promArr.push(file.path));
promArr.push(prom);
});
});
};
helper(tree);
Promise.all(promArr)
.then(resArr => console.log(`treeRecurse - resArr:`, resArr));
};
它爬行通過一切,但promArr
被解決得太快。另外,我不確定要通過什麼解決。饒了我。
你的意思是'//一個GET REQ到** **第三對象的ID將返回以下數組:'... - > ...'[{ name:'index.html',輸入:'file',id:44444422}]'? – Redu
@redu是ty編輯 –