Сообщение от undersatanae666
|
Есть такой код:
var DataURL = "";
function toDataURL(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
var reader = new FileReader();
reader.readAsDataURL(xhr.response);
reader.onloadend = function() {
DataURL = DataURL + reader.result + ";";
}
};
}
for (var i in result) { //в массиве result ссылки на изображения
toDataURL(result[i]);
}
console.log(DataURL);
Он не работает, потому что console.log срабатывает раньше, чем заполняется переменная DataURL.
Как переписать функцию toDataURL() чтобы она стала синхронной?
|
У вас не только консоль ничего не "отдаст", но и счетчик для заполнения массива ссылками на изображения ничего не заполнит.
Меняем функцию запроса добавив callback
function toDataURL(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function() {
var reader = new FileReader();
reader.readAsDataURL(xhr.response);
reader.onload = function() {
DataURL = DataURL + reader.result + ";";
callback(DataURL); // вызов после всех манипуляций
}
};
}
toDataUrl("ваш урл!", function(youcallback){
console.log(youcallback); // вывод результата после обработки
}
Так же и заполнение массива ссылками нужно по коллбэку вызывать.
код не проверял, требуется отладка, по памяти писал. Указал лишь направление.