javascript - 如何等到 localStorage.setItem 在 Angular 4 中完成

标签 javascript angular asynchronous local-storage

我正在开发一个 Angular 4 应用程序。一旦用户想要登录系统,它就会向服务器发送一个 http 请求,服务器验证用户并发送一个带有身份验证 key 和其他用户详细信息的 reposnce。我使用本地存储来保存这些信息

login() {
  if (this.loginForm.valid) {
    this.serviceUserService.authenticate(this.loginForm).subscribe(response => {
      if (response.message != "_err") {
        //saving the current user in localstorage
        localStorage.setItem('currentUser', JSON.stringify(response.body));
        this.router.navigateByUrl('/');
      } else {
        alert("invalid login. Please try again")
      }
    }, err => {
      console.log(err);
    })
  }
}

localStorage.setItem() 似乎是一个异步函数。所以在将当前用户保存在本地存储之前,它会重定向到主页。但由于 token 未保存在本地存储中,因此任何 http 请求都不会起作用。我如何等到 localStorage.setItem() 完成它的任务,然后将用户发送到主页。

最佳答案

你错了,所有 localStorage 调用都是同步。也许您可以在导航到下一页之前添加一个检查。

 localStorage.setItem('currentUser', JSON.stringify(response.body));     
 this.router.navigateByUrl('/');

关于javascript - 如何等到 localStorage.setItem 在 Angular 4 中完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457389/

相关文章:

javascript - JavaScript 中使用 Wea​​kMap 的多个私有(private)属性

javascript - 如何使用 CSS 或 JS 定位类的父类

java - 使用 angular2 ngFor 迭代 Map 对象

javascript - 从 Angular2 组件传递 Json 到 Node.js

mongodb - 替代将 'await'与lazy_static一起使用!使用rust 的宏?

JavaScript 函数作用域

javascript - 如何在 Google Maps API 上绘制复杂的透明圆圈

css - 无法以 Angular 获取 openlayers css

c# - 为什么我必须使用(async method).result而不是await(async method)?

asynchronous - Puppeteer - 等待元素具有一定的值(value)