Прежде всего, я должен признаться, что здесь есть несколько десятков подобных вопросов в stackoverflow (this, this и множествах других), но все они прекрасно решены с помощью функцию обратного вызова, или просто положить код внутри этого 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
и возвращает сама переменная стиля. Таким образом, нет места для обратных вызовов.
Вы можете предварительно загрузить изображения перед тем, как начать создание шаблона? – Icepickle
Вы можете увидеть параметр 'index', переданный' patternBuilder'. Таким образом, эти изображения создаются динамически, и я не знаю заранее, каковы все эти образы. Их теоретически могут быть сотни. Поэтому мне нужно загрузить изображение, только когда оно мне понадобится. – Jacobian
Можете ли вы поместить свой код в jsfiddle или codepen, это так беспорядочно, чтобы получить что-то от ваших кодов здесь. Спасибо – ristapk