1

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

Messages.find({state:"outbox"}).observe({ 
    added: (doc) => { 
    console.log(" observe "); 
     console.log("userId : " + this.userId); // undefined 
     console.log("Meteor.userId(): " + Meteor.userId()); // "Exception in queued task: Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions." 
     //....... 
    } 
}); 

большое спасибо за внимание.

+0

Является ли это вызовом из функции публикации или просто во всем мире при запуске сервера? –

ответ

2

В observe обратных вызовов, то this ключевое слово не указывает на объект публикации (он указывает курсором соответствующей запроса), так что он не имеет userId свойство.

Вы можете создать замыкание, чтобы сделать userId доступны функции с помощью

const userId = this.userId; 

в теле самой публикации, а затем просто использовать его в функцию обратного вызова (как userId).

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