Вернуть base64 изображения в цикле
Есть такой код:
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); // вывод результата после обработки } Так же и заполнение массива ссылками нужно по коллбэку вызывать. код не проверял, требуется отладка, по памяти писал. Указал лишь направление. |
Часовой пояс GMT +3, время: 21:55. |