首先,我必须承认,在stackoverflow上有数十个类似的问题(例如此处,此处和其他无数问题),但这些问题都可以通过回调函数或将代码放入
但这不是我的情况。这是我的函数签名,负责加载图片:
所以,我需要返回!我必须这样做,别无选择。我必须遵循这个签名的原因是,这个模式被一些外部库函数使用,看起来像这样:
所以,即使我可以改变我的
image.onload
事件中轻松解决。image.onload = function () {
//do other stuff that should be done right after image is loaded
}
但这不是我的情况。这是我的函数签名,负责加载图片:
function patternBuilder (index) {
var pattern, image, ...
...
image = new Image();
image.id = "_" + index + "_";
image.src = "images/_" + index + "_.png";
image.onload = function () {
pattern = ctx.createPattern(image, "repeat");
}
return pattern; // !!!! may return undefined if image is not yet loaded
}
所以,我需要返回!我必须这样做,别无选择。我必须遵循这个签名的原因是,这个模式被一些外部库函数使用,看起来像这样:
style: function (feature) {
var pattern = patternBuilder(feature.get("index"));
var style = new ol.style.Style({
fill: new ol.style.Fill({
color: pattern
})
});
return style;
}
所以,即使我可以改变我的
patternBuilder
函数的逻辑,我仍然无法更改外部库函数。这个外部函数使用patternBuilder
并返回一个样式变量本身。因此,没有回调的空间。
index
传递给patternBuilder
。因此,这些图像是动态创建的,我事先不知道所有这些图像是什么。理论上可能有数百个。因此,我需要在需要时加载图像。 - Jacobian