NgStorage выполняет операции асинхронно?

Я работаю с angular.js и ngstore. Я использую аутентификацию на основе токенов с помощью службы REST node.js, из приложения angular я отправляю свои учетные данные на сервер отдыха и получаю токен, затем сохраняю этот токен в $localStorage для использования во всех приложениях angular ($localStorage.token). Но оказывается, что иногда $localStorage.token не определен, даже когда я назначил ему токен, поэтому, когда я вызываю другую конечную точку отдыха, отправляющую токен в заголовках, я фактически отправляю неопределенное значение. Также, когда я пытаюсь выйти из системы, я делаю

delete $localStorage.token

но когда я проверяю, вышел ли пользователь из системы, токен все еще там. Что странно, что если я устанавливаю точки останова сразу после удаления токена или назначения токена и жду некоторое время, все работает, что заставляет меня думать, что эти операции могут быть асинхронными?

Это общая проблема? Как я мог это исправить?

Любая помощь будет оценена, спасибо.

РЕДАКТИРОВАТЬ: на самом деле я обнаружил, что проблема заключается в использовании window.location, если я использую $location.path, он работает, но по определенным причинам мне нужно использовать window.location, и он должен работать, насколько я знаю

2 ответа

Решение

У меня была та же проблема сегодня, и использование следующего коммита сработало для меня.

https://github.com/raynode/ngStorage

Здесь есть полезное обсуждение этой проблемы:

https://github.com/gsklee/ngStorage/issues/39

В этой версии ngStorage автор тщательно продумал способ "сохранения" перед продолжением и выполнением $window.location.reload();

Во время входа в систему:

$localStorage.value = 100;
$localStorage.$save();

(а затем) $window.location.reload();

Во время выхода из системы:

delete $localStorage.value;
$localStorage.$save();
$window.location.reload();

Это помогло мне убедиться, что переменные $localStorage были удалены перед перезагрузкой страницы.

Нет, локальное хранилище не является асинхронным.

JavaScript является однопоточным окружением, и операции чтения / записи в локальное хранилище выполняются немедленно.

Контейнеры сеанса и локального хранилища одинаковы. За исключением того, что хранилище сеанса является парой ключ / значение с указанной меткой времени истечения.

Хранение в HTML5 не является надежным ресурсом. Так как есть ряд состояний браузера, которые будут ограничивать или удалять хранилище.

Вы имеете в виду ngStore это модуль, о котором я никогда не слышал. Не существует локального модуля хранения, который включен в AngularJS по умолчанию, и есть несколько модулей с открытым исходным кодом, которые обрабатывают это.

Наиболее вероятно, что вы обрабатываете токен сеанса как переменную состояния вместо обещания состояния. Когда вы используете переменную для хранения состояния ресурса на сервере, это состояние имеет 3 возможных значения. 1 не назначено, 2 ожидающих назначения и 3 назначенных значения.

Вместо того, чтобы читать токен из хранилища напрямую. У вас должна быть служба, которая возвращает обещание, которое разрешит предоставить этот токен. Это обещание будет выполнено только после завершения операции REST.

Другие вопросы по тегам