だけでなく、下のJavaScriptの「再帰AJAXコールバック」はどのように機能しますか?
Here is the script on jsfiddleを、私は私のレポの1程度のデータを取得するために、GitHubのAPIを使用していると私は、コールバック関数と再帰関数は、(それらに添付のコールバックと再帰関数のように)重複するトラブルに実行しています:
(function() {
'use strict';
function makeAJAXCall(hash, cb) {
$.ajaxSetup({
accept: 'application/vnd.github.raw',
dataType: 'jsonp'
});
$.ajax({
url: hash,
success: function (json) {
//console.info(json);
// Time for callback to be executed
if (cb) {
cb(json);
}
},
error: function (error) {
console.error(error);
// an error happened, check it out.
throw error;
}
});
}
function parseBlob(hash) {
return makeAJAXCall(hash, function (returnedJSON) { // no loop as only one entry
console.log(returnedJSON.data);
return returnedJSON.data.content;
});
}
function walkTree(hash) {
var tree = 'https://api.github.com/repos/myusername/SVG-Shapes/git/trees/' + hash;
return makeAJAXCall(tree, function (objectedJSON) {
var objectList = [], i, entry;
for (i = 0; i < objectedJSON.data.tree.length; i += 1) {
entry = objectedJSON.data.tree[i];
//console.debug(entry);
if (entry.type === 'blob') {
if (entry.path.slice(-4) === '.svg') { // we only want the svg images not the ignore file and README etc
//console.info(entry.path)
objectList.push(parseBlob(entry.url));
}
} else if (entry.type === 'tree') {
objectList.push(walkTree(entry.sha));
}
}
if (cb) {
console.log(objectList);
cb(objectList);
}
return objectList;
});
}
$(document).ready(function() {
var returnedObjects = walkTree('master', function (objects) { // master to start at the top and work our way down
console.info(objects);
});
});
}());
返されるJSONは、ブログ(ファイル)またはツリー(ディレクトリ)です。それがツリーの場合は、walkTree関数が再度呼び出されます。私はここでコールバックがどのように動作するのか、関数の中から最終ブロックに至るまでデータを取得する方法を理解していません。
誰かがこれをどうやって行うべきかを明確にすることはできますか?