Au début, je pensais que l'utilisation du stockage événement, mais comme vous pouvez voir des this question - et this question et this demonstration à html5demos.com, l'utilisation de l'événement de stockage est destiné à suivre l'évolution de la localStorage entre windows/tabs, pas à l'intérieur du document lui-même.
Mais vous pouvez créer votre propre événement, le tir lorsque setItem
est appelé par setItem remplaçant:
//create an "onstoragechange" custom event
var storageEvent = document.createEvent('Event');
storageEvent.initEvent('onstoragechanged', true, true);
document.addEventListener('onstoragechanged', function (e) {
alert('value added to localstorage');
//or
alert(localStorage.getItem('test'));
//call the code here, as you above would do after setTimeout
//"callback.call(self);" or whatever
}, false);
//override localStorage.setItem
var oldSetItem = Storage.prototype.setItem;
Storage.prototype.setItem = function() {
oldSetItem.apply(this, arguments);
document.dispatchEvent(storageEvent);
}
//test
localStorage.setItem('test', 'value');
demo/jsFiddle: http://jsfiddle.net/cYLHT/
Maintenant vous avez un événement qui est envoyé chaque fois que vous enregistrez quoi que ce soit à localStorage, et la valeur écrite est réellement présente. Développez ceci avec des événements qui aident votre application - comme un événement spécial si une clé importante est mise à jour/stockée. Ce qui précède semble peut-être être une réponse «hors sujet», ou excessive, mais je pense que c'est une bien meilleure approche que de propager setTimeouts autour du code.
Plus de code le rendrait plus facile à aider. – EmptyArsenal
enregistrer dans localStorage est instantané ... Vous pouvez récupérer la valeur sur la ligne suivante si vous le souhaitez. – david
C'est _synchronous_, pas instantané :) –