У меня есть приложение для определения пятен и вы хотите дождаться окончания цикла. Но он работает только после перезагрузки моего приложения.jQuery Отложенное должно работать, но не
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();
});
Я не вижу проблемы, почему это не может работать. Проблема заключается в том, что «сделанный» обратный вызов не выполняется при первой загрузке. Если я перезагружаю приложение, он отлично работает ... Что-то не так с отложенным материалом?
Если 'snapshot()' уже возвращает обещание, то использование 'done()' подразумевало бы, почему вы не возвращаете это обещание вместо создания нового? – adeneo
Уверены, что вы не получаете ошибок js или ошибок ajax в этом процессе? Потому что ваш, когда применяется к этому массиву отложенных, кажется, полностью в порядке. – lib3d