У меня есть следующий код, который работает, за исключением функции $.when.apply($, promises).done()
(у меня есть ведение журнала консоли, когда вещи обрабатываются).
Я не понимаю, почему .done
не работает.
Что делает код в основном для каждого выбора в контейнере фильтра, заполнить выбор со значениями из индексированного db, который является его собственной функцией и возвращает обещание. Я вижу, что все работает, но окончательный .done
должен отображать элементы на экране, когда все отображается, однако элементы экрана не отображаются, а страница остается белой.
grid.genPage = function() {
console.time('genPage');
$(grid.settings.filterContainer).hide();
var gridParent = grid.e.parent('div');
gridParent.hide();
var promises = [];
return $.Deferred(function(){
var self = this;
if (!grid.settings.startGenPage.call(this, grid)){
self.reject();
}
grid.dtOptions.oColVis.aiExclude = [0];
grid.displayFields = [];
$.when(
grid.buildFilter(),
grid.buildViews(),
grid.generateDataTable(grid.showColumns),
grid.buildManageButtons()
).then(function(){
console.log('start populating filters');
$.each(grid.config.configs[grid.settings.defaultView], function(i, v) {
var p = $.Deferred(function(){
var self = this;
var field = Object.keys(v); //get field Name
if ($.inArray(i, grid.configIgnorArray) > -1) {
console.log('ignore resolve');
self.resolve();
}
var c = v[field];
if (c.filters.fieldType === 'select') {
var el = $('select[name="' + grid.e.prop('id') + 'Filter_' + field + '"]');
var os = c.options.objectStore;
var idx = c.options.idx;
var s = c.options.lookup;
$.when(grid.checkCache(el, c.options.objectStore, c.options.idx, c.options.lookup))
.then(function(){
console.log('select resolve');
self.resolve();
});
}else {
console.log('other resolve');
self.resolve();
}
});
promises.push(p);
});
});
}).then(function(){
$.when.apply($, promises).then(function(){
console.log('end populating filters');
console.log('genpage finish');
grid.settings.completeGenPage.call(this, grid);
$(grid.settings.filterContainer).show();
gridParent.show();
console.timeEnd('genPage');
self.resolve();
});
}).promise();
};
В приведенном выше коде console.log('end populating filters');
никогда не появляются в консоли. Я уверен, что это проблема с чем-то неправильным, но я не вижу, где.
Заранее спасибо
Просто интересно, тот же результат с помощью 'всегда (...)'? Вы уверены, что вы делизовали объект? Quiclkly проверяет ваш «длинный длинный код», вы никогда не разрешаете первый отложенный объект –
'Quiclkly проверяет ваш длинный длинный код, вы никогда не разрешаете первый отложенный объект' (который вы поворачиваете как обещание кстати) –
Так что, чтобы быть уверенным, установите 'console.log()' inside 'then()' перед этим: 'console.log ('отложенное решение'); $ .when.apply ($, обещает). then (...); '. Ваша проблема еще с '$ .when()' ??? –