ngStorage是否异步执行操作?

时间:2015-02-22 17:31:46

标签: javascript angularjs ng-storage

我正在使用angular.js和ngstore。我使用基于令牌的身份验证和node.js REST服务,从角度应用程序我将我的凭据发送到休息服务器并收到令牌,然后我将此令牌存储在$ localStorage中以在整个角度应用程序中使用($ localStorage.token)。但是有时$ localStorage.token是未定义的,即使我将令牌分配给它,所以当我调用另一个休息端点在头中发送令牌时,我实际上发送了一个未定义的值。此外,当我尝试退出时,我做

delete $localStorage.token

但是当我检查用户是否已经注销时,令牌仍然存在。 奇怪的是,如果我在删除令牌或分配令牌之后立即设置断点并等待一段时间,那么一切正常,这让我觉得这些操作可能是异步的吗?

这是一个常见问题吗?我怎么能解决这个问题?

任何帮助都会表示赞赏,谢谢。

编辑:实际上我发现问题是在使用window.location时,如果我使用$ location.path它正在工作,但由于某些原因我需要使用window.location,它应该工作到目前为止据我所知

2 个答案:

答案 0 :(得分:5)

我今天遇到了同样的问题,使用以下提交对我有用。

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变量。

答案 1 :(得分:1)

不,本地存储不是异步的。

JavaScript是单线程环境,对本地存储的读/写操作立即发生。

会话和本地存储容器都是相同的。除了会话存储是指定了过期时间戳的键/值对。

HTML5中的存储不是可靠的资源。由于有许多浏览器状态会限制或删除存储。

您指的是ngStore这是我从未听说过的模块。默认情况下,AngularJS不包含本地存储模块,并且有多个开源模块可以处理此问题。

最有可能发生的事情是您将会话令牌作为状态变量而不是状态承诺处理。当您使用变量来保存服务器上的资源状态时,该状态有3个可能的值。 1未分配,2个待处理分配和3个分配值。

而不是直接从存储中读取令牌。您应该拥有一个返回承诺的服务,该承诺将解析以提供该令牌。此承诺仅在REST操作完成后才会解决。