2016-10-14 5 views
1

У меня есть сценарий, который загружает несколько SVG-файлов и затем их рисовать. https://plnkr.co/edit/offqAzlaR1xqGrROQBTcjQuery обещание (переменное количество обещаний)

var s = Snap("#svg"); 
    var bigCircle = s.circle(150, 150, 100); 

    // Helper to convert Snap.load() into a Promise. 
    function loadSVG(url) { 
    var deferred = new $.Deferred(); 
    Snap.load(url, function(x) { 
     deferred.resolve(x); 
    }); 
    return deferred.promise(); 
    } 

    // Make an array of Promises. 
    var loadPromises = [ 
    loadSVG('eu.svg'), 
    loadSVG('af.svg'), 
    loadSVG('am.svg'), 
    loadSVG('as.svg'), 
    ]; 

    // Wait for all the Promises to finish. 
    $.when(loadPromises).done(function (results) { 
    console.log(results); //<-- seems to be a promise again!!!! 
    for (var i = 0; i < results.length; ++i) { 
     var svg = results[i]; 
     // Your processing of each SVG goes here. 
     var g = svg.select("g"); 
     s.append(g); 
    }  
    }); 

Я не получаю никаких ошибок, но самое странное, что мое сделано() результат представляется обещание снова (по крайней мере, похоже, что в консоли). Результат done() должен быть массивом объектов SnapJs. Что я делаю не так?

+0

если вы используете [Promise Polyfill] (https: // GitHub .com/jakearchibald/es6-prom /) для обратных браузеров (семейство IE), затем '$ .when (loadPromises) .done (function (results) {' просто становится 'Promise.all (loadPromises). then (function (results) {' –

ответ

6

Вы должны будете использовать apply, чтобы передать массив аргументов в $.when

$.when.apply($, loadPromises).done(function() { 
    var results = [].slice.call(arguments); 

    .... 
}); 

Это тогда равно

$.when(loadPromises[0], loadPromises[1], loadPromises[2], etc) 
+0

Отлично. Большое спасибо! Я бы не узнал это сам. – Gerfried

+0

Есть ли что-то подобное с «результатами»? Потому что я получаю только первый результат в «результатах», а не в массиве – Gerfried

+0

Действительно, дайте мне секунду, чтобы попробовать это – adeneo

Смежные вопросы