簡體   English   中英

如何等到localStorage.setItem以角度4結束

[英]how to wait until localStorage.setItem finishes in angular 4

我正在開發一個角度4應用程序。 一旦用戶想要登錄系統,它就會向服務器發送http請求,服務器驗證用戶,並發送帶有身份驗證密鑰和其他用戶詳細信息的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()是一個異步函數。 因此,在將當前存儲中的當前用戶保存之前,它會重定向到主頁面。 但由於令牌未保存在本地存儲中,因此http請求不起作用。 我如何等待localStorage.setItem()完成它的任務,然后將用戶發送到主頁。

你錯了,所有localStorage調用都是同步的 您可以在導航到下一頁之前添加一個檢查。

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

如果有人遇到同樣的問題...原因是我在服務類中創建了一個變量來保存當前用戶並在構造函數中設置該變量的值。 因此,在登錄頁面中,當調用authenticate方法時,它會嘗試初始化變量,但由於用戶尚未登錄,因此它仍然為null 這導致了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM