У меня есть сценарий, который загружает несколько 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. Что я делаю не так?
если вы используете [Promise Polyfill] (https: // GitHub .com/jakearchibald/es6-prom /) для обратных браузеров (семейство IE), затем '$ .when (loadPromises) .done (function (results) {' просто становится 'Promise.all (loadPromises). then (function (results) {' –