Github APIを使用してデータを取得する関数をいくつか作成しました。私はデータを取得するためにコールバックを用意していますが、関数がどこで終了し、いつ変更を止めるのかを理解する方法はわかります。オブジェクトを記入して関数とコールバックのスコープを理解しようとしています
たとえば、最初の関数では、AJAX呼び出しが成功すると、データが操作される2番目の関数でコールバックが実行されます。これは、最初の関数の戻り値が必要ない、または使用されていないことを意味しますか? 2番目の関数では、データが使用され、配列にプッシュされた後、配列が返されます。または、逆に(空の)配列が返され、コールバックがその処理を行います。
私は最終的にコールバックからオブジェクトにデータを取得し、その埋め込まれたオブジェクトを親関数から戻そうとしています。ここで
function makeAJAXCall(hash, cb) {
var returnedJSON, cb = cb, hash = hash;
$.ajax({
accepts: 'application/vnd.github-blob.raw',
dataType: 'jsonp',
url: hash,
success: function (json) {
console.info(json);
returnedJSON = 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;
}
});
return returnedJSON;
}
function parseBlob(hash) {
var objectedJSON, objectList = [], i;
objectedJSON = makeAJAXCall(hash, function (objectedJSON) { // no loop as only one entry
objectList.push(objectedJSON.content);
});
return objectList;
}
function walkTree(hash) {
var objectedJSON, objectList = [], i, entry;
var hash = 'https://api.github.com/repos/myAccountName/repo/git/trees/' + hash;
objectedJSON = makeAJAXCall(hash, function (objectedJSON) {
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));
}
}
});
console.info(objectList);
return objectList;
}
$(document).ready(function() {
var objects = walkTree('master', function() { // master to start at the top and work our way down
console.info(objects);
});
});
私はこれを修正しようとする可能性がある正しいことが行われているいくつかの例を指摘できますか? – Hyposaurus