Я застрял. Это не имеет никакого смысла.Застрял на отсрочке с jQuery
Эта следующая строка кода вызывает loadJSONfile, а затем устанавливает вызов dataLoaded при разрешении getJSON.
$.when(loadJSONfile(pathToLoad + "/" + fileToLoad,provIdx)).done(dataLoaded);
Вот loadJSONfile:
function loadJSONfile(pathToFile,idx1,idx2,num2,idx3,num3,dir) {
var deferred = $.Deferred();
//var IDX = idx;
/* code to load the stuff goes here */
$.getJSON(pathToFile).done(function(data) {
deferred.resolve(data,idx1,idx2,num2,idx3,num3,dir);
}).fail(function() { console.log('FAILED') });
return deferred.promise();
}
Следующая строка кода вызывает loadMapData, и устанавливает вызов mapDataLoaded wheen loadMapData решает:
$.when(loadMapData(provinceEntry,regionIdx)).done(mapDataLoaded);
Вот loadMapData:
function loadMapData(provinceEntry,regionIdx) {
var deferred = $.Deferred();
var regionCode = provinceEntry.regions[regionIdx];
$.getJSON('data/topojson' + String(provinceEntry.Number) + String(regionCode) + '.topojson').done(function(topoData) {
deferred.resolve(topoData,provinceEntry,regionIdx);
})
}
Но это не работает. Код мгновенно отменяет отложенное, что, очевидно, приводит к сбою mapDataLoaded.
Почему одно работает, когда другое, что идентично, не работает?
Может быть, мне что-то не хватает, но они не являются идентично, потому что ваша первая функция возвращает обещание, а ваша вторая функция ничего не возвращает. – Gareth
^'loadMapData' не возвращает обещание – adeneo
И вам не нужно' $ .Deferred' здесь, просто выполните 'return $ .getJSON (...) ', поскольку он уже возвращает обещание. – adeneo