私は Spotify アプリを持っていて、ループが終了するのを待ちたいと思っています。ただし、アプリを一度リロードした後にのみ機能します。
function matchRecommendations(result) {
var deferreds = new Array();
for ( var i = 0; i < result.length; i++) {
// Async wait
var dfd = $.Deferred();
deferreds.push(dfd.promise());
...
// Wait for search to finish
search.tracks.snapshot(0, 1).done(
function(snapshot) {
// If match was found => create recommendation object
var uri = snapshot._uris[0];
var meta = snapshot._meta[0];
if ($.type(meta) !== "undefined") {
if ($.type(meta.name) === "string") {
console.log(uri);
var rec = new Recommendation(uri, meta,
explanation, score);
RadioView.prototype.addRecommendation(rec);
}
}
// Async task finished
dfd.resolve();
});
}
return deferreds;
}
ここでは、上記のメソッドを呼び出しており、それが終了するのを待ちたいと考えています。
$.when.apply($, matchRecommendations(result)).done(
function() {
console.log("finished");
RadioView.prototype.render();
});
なぜこれが機能しないのか、問題がわかりません。問題は、初回ロード時に「完了」コールバックが実行されないことです。アプリをリロードすると問題なく動作します...Deferred Stuff に何か問題がありますか?