我的發佈功能發佈後的記錄是這樣的:流星之前和用戶登錄
Meteor.publish('ownedrecords', function() {
if (!this.userId) {
this.error(new Meteor.Error(500, 'Internal server error'));
return;
}
return Records.find({owner:this.userId});
});
我訂閱的客戶是這樣的:
Meteor.subscribe("ownedrecords")
但用戶後登錄,在客戶端不沒有得到用戶擁有的記錄。所以我這樣做:
Deps.autorun(function() {
var user = Meteor.userId();
Meteor.subscribe("ownedrecords");
}
這解決了這個問題。但這是一個標準和推薦的做法嗎?
返回this.stop()是不是更好(用於內存管理)?這樣,發佈不會被創建,服務器可以釋放內存。如果你返回'[]'或'this.ready()',那麼就有一個消耗一些內存的發佈(沒有數據)。我錯了嗎? –
'this.stop()'由於關閉訂閱,所以肯定會節省內存,即使發佈的遊標爲空,觀察者仍然會使用內存。我的理解是,OP希望訂閱在用戶登錄後立即返回新的相關數據,而不需要「Deps.autorun」,因此它需要保持活動狀態。 – Akshat
嗯,我很困惑。由於userId來自響應環境,一旦設置了userId,它是否會使發佈再次失去活性? –