【发布时间】:2016-10-14 20:49:33
【问题描述】:
我有一个脚本可以加载多个 SVG 文件,然后应该绘制它们。 https://plnkr.co/edit/offqAzlaR1xqGrROQBTc
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() 结果似乎又是一个承诺(至少在控制台中看起来像这样)。 done() 的结果应该是一个 SnapJs 对象的数组。我做错了什么?
【问题讨论】:
-
如果您将Promise Polyfill 用于向后浏览器(IE 系列),那么
$.when( loadPromises ).done(function ( results ) {将变为Promise.all( loadPromises ).then(function ( results ) {
标签: javascript jquery asynchronous promise