簡體   English   中英

登錄后確保Meteor.user()在客戶端上可用

[英]Ensure Meteor.user() is available on client after login

我發現了這個奇怪的問題,它看起來很致病!

盡管登錄后Meteor.user()始終可用,但是我看到它根本不可靠,因為它經常返回undefined。

在提到了一些SO問題之后,由於“計時問題”,看來Meteor.user()可能未完全加載。

我需要一種可靠的方法來確保Meteor.user()在客戶端完全加載。 我的大部分代碼都使用這種方法來獲取用戶個人資料。 因此,能夠使這種方法行之有效,而不是使用此處給出的方法,將是很棒的

在登錄一段時間后, Meteor.user()將始終在客戶端完全加載。 取決於用戶對象本身的大小,延遲和帶寬,時間不會很長,通常為1ms到100ms。 您無需執行任何操作即可確保它加載-您只需要解決延遲,只需等待它加載后再運行依賴於它的代碼即可。 例如,你可以使用Tracker.autorun()盡快使一些運行方式Meteor.user()變為可用:

在客戶端上:

Tracker.autorun(() => {
  if (Meteor.user()) {
    ... do the thing that depends on Meteor.user()
  }
});

在輔助程序或其他一些渲染代碼中,您通常需要進行防御性編碼,例如:

const username = Meteor.user() && Meteor.user().username;

永遠不會中斷。 當沒有登錄用戶或用戶對象尚不可用時,它將僅返回undefined。

關於您的后續問題,就模板助手而言,一種典型的模式是渲染微調器/加載動畫模板,直到模板的數據准備就緒,然后再切換到實際模板。 這樣,您的模板代碼就不必處理未准備好的數據。 這是有關該主題的一個很好的教程

如@ michel-floyd所述,您可以使用Tracker.autorun(() => {/*..*/}); 不過,使用全局助手可能是一個更好的選擇。

但是根據您的具體問題:

我需要一種可靠的方法來確保Meteor.user()在客戶端完全加載。

使用Accounts.onLogin會更高效:

import { Accounts } from 'meteor/accounts-base';

Accounts.onLogin(() => {
  // User is logged in and its data fully loaded
});

暫無
暫無

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

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