2015-12-08 4 views
1

У меня есть перехватчик:Почему Meteor.user и Meteor.userId отличаются?

Router.onBeforeAction(function() { 
    if (!Meteor.userId()) { 
     console.log("lets login"); 
     Router.go("login"); 
    } else { 
     this.next(); 
    } 
}, { 
    except: ['login', 'signup'] 
}); 

Это работает очень хорошо, пока я не заменить Meteor.userId() для Meteor.user (!). Кажется, что .user, когда обновление страницы не определено и перенаправляет его на мою страницу входа. Мой логин-маршрутизатор также проверяет .user, и здесь он прав.

Почему это различие?

+1

См. Мой ответ на [этот вопрос] (https://stackoverflow.com/questions/32386208/meteor-logout-causes-helper-to-rerun). –

+1

Meteor.userId() возвращает текущий идентификатор пользователя, а Meteor.user() возвращает весь объект – Nakib

+0

@Nakib Я знаю, но это не проблема. My if! Meteor.user() также проверяет объекты, но после обновления он всегда остается неопределенным. –

ответ

0

Это правда, Meteor.userId() возвращает id, в то время как объект Meteor.user() возвращает объект.

Однако, возвращая объект (Meteor.user()) занимает больше времени, чем просто возвращается идентификатор, из-за асинхронный вопрос, к тому времени, скрипт проверки если (! Meteor.user()) {...}, Meteor.user() еще не обработан и не возвращен!

В результате, существует несколько способов в связи с этим асинхронным выпуском (например, в Meteor/React приложения, мы можем иметь что-то вроде подписаться, и ждать, пока ручки не готов)

Смежные вопросы