API を使用してデータを取得し、.getJSON()
それを配列に格納するアプリがありますが、配列が完全に読み込まれるまでコードを進めたくないので、.done()
メソッドを呼び出しましたが、配列が完全に定義される前にコードが配列を処理し続けるため、未定義のエラーが発生します。関連するコードは次のとおりです。
var similarList = getSimilar(randArtist, year);
similarList.done(function(item){
for (var j=0, len=similarList.length; j<len; j++){
similarArtistDict[similarList[j].name] =
similarArtistDict[similarList[j].name] || true;
}
関数はリストを返す必要があるgetSimilar
ため、変数 similarList を定義します。代わりに、呼び出しが完了したにもかかわらず、コードは for ループに直接移動し、ループが を取得しようとすると例外が発生しますsimilarList.length
。
EDIT PART 2: 参照用に getSimilar メソッドを簡略化したバージョン。関数自体が何も返さないことに気付いたので、配列を返さなかった AJAX 呼び出し自体を返そうとしました。この関数を微調整して、配列 data.artists を返すにはどうすればよいでしょうか?:
function getSimilar(name, year){
$.getJSON(ECHONEST_SIMILAR_URI, {
api_key: ECHONEST_KEY,
name: name,
artist_start_year_before: year,
results: '5'
}, function(response){
var data = response.response;
console.log(data);
console.log(data.artists);
return data.artists;
} ); }