Я немного смущен об использовании LocalForage. Я просто хочу сохранить и получить изображение из LocalForage, вот как я это делаю.LocalForage, images and Blobs
function preload() {
localforage.setDriver(localforage.LOCALSTORAGE).then(function() {
lcl_images[0] = new Object();
lcl_images[0].key = 'lclstorage_1';
lcl_images[0].value = 'http://www.superga.com/tcnimg/S/02/S009TE0/XBS009TE0___949______.jpg';
lcl_images[1] = new Object();
lcl_images[1].key = 'lclstorage_2';
lcl_images[1].value = 'https://mir-s3-cdn-cf.behance.net/project_modules/max_1200/2150fb35419617.56f6327b44e47.gif';
for (var i = lcl_images.length - 1; i >= 0; i--) {
var valore = lcl_images[i].value;
localforage.setItem(lcl_images[i].key, lcl_images[i].value, function() {
console.log('Saved: ' + valore);
});
}
});
}
function use_preloaded_image() {
for (var i = lcl_images.length - 1; i >= 0; i--) {
var key = lcl_images[i].key;
localforage.getItem(lcl_images[i].key, function(err, readValue) {
console.log('Read: ', readValue);
document.getElementById(key).src = readValue;
});
}
}
Дело в том, я не знаю, если это правильный метод, чтобы использовать изображения: хранить их как строки, localForage должны использовать parse
и stringify
. Этот пример отлично работает (когда я перехожу в автономный режим, обновляю страницу, изображения в localstorage доступны), но я вижу, что кто-то использует объекты изображения или Blobs (об этом я не слышал, и мгновенный поиск не сказал мне многое об этом). другие делают запрос XHR для загрузки изображения, затем они сохраняют его.
Я могу подумать об использовании запроса XHR для проверки того, было ли загружено изображение. Это правильно?
Во-вторых: кто-то говорит, что хранение с каплями лучше. Зачем?
Пожалуйста, помогите мне, спасибо.
EDIT (Multiple Promises)
Когда я получить изображения, которые я должен связать каждый из них с <img>
. Но я не знаю, как это сделать, с обещаниями. Потому что при использовании Promise.all()
я не могу использовать цикл for
(поэтому нет индекса для привязки изображений src с идентификатором изображений).
var promises = [];
for (var i = lcl_images.length - 1; i >= 0; i--) {
promises.push(localforage.getItem(lcl_images[i].key));
}
Promise
.all(promises)
.then(function(value) {
console.log(value);
})
.catch(function(error) {
console.log(error);
});
for (var i = lcl_images.length - 1; i >= 0; i--) {
document.getElementById(lcl_images[i].key).src = value;
}
Promise
.all(promises)
.then(function(value) {
console.log(value);
document.getElementById(lcl_images[i].key).src = value;
// I can't get the index i, no way to set <img> src for id attribute
})
.catch(function(error) {
console.log(error);
});
FIXPromise.all(). Затем()
Promise
.all(promises)
.then(function(value) {
console.log(value);
for (var i = lcl_images.length - 1; i >= 0; i--) {
document.getElementById(lcl_images[i].key).src = value[i];
};
})
Спасибо за ответ, это очень помогло. Но у меня проблемы с обещанием. Поскольку я не могу запустить цикл, я не знаю, как связать идентификатор изображения (сохраненный в ключе) с img src (сохраненным в значении). – FrancescoN
Promise.all дает вам обещание для массива. В вашем коде вы, кажется, считаете, что значение «значение» - это одно, а не массив. – nlawson
Я развивался, пока вы отвечали, я собираюсь отредактировать это.Итак, просто чтобы указать на вопрос: если я хочу подождать, пока все изображения будут загружены, я должен добавить как «var is_all_stored = false» и «prom.then» (значение) {is_all_stored = true;} '. Таким образом, я могу выйти в автономный режим, когда все будет сохранено, верно? – FrancescoN