我有一个 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();
});
我看不出为什么这不起作用的问题。问题是第一次加载时没有执行“完成”回调。如果我重新加载应用程序,它就可以正常工作......延迟的东西有什么问题吗?