2015-04-05 46 views
0

只需學習Meteor並在同一時間將我的頭圍繞在javascript上。爲什麼我無法將檢索到的文檔分配給控制檯中的變量

我有定義的集合,並能夠通過使用.findOne()控制檯命令來成功地檢索文檔:

myCollection.findOne({elementID: "avatar"}); 
然而

,當我發現它在同一時間分配給一個變量它返回undefined:

var elementObject = myCollection.findOne({elementID: "avatar"}); 

編輯:var elementObject = myCollection.findOne({elementID: "avatar"});後返回undefined,我在控制檯中再次跑elementObject並返回正確的值。所以最終它的工作原理,但沒有顯示在第一次嘗試。這很好理解爲什麼。

+1

你可能在不同的地方運行這兩段代碼。客戶端和服務器控制檯通過findOne()產生不同的結果。請爲您的問題添加更多解釋。 – 2015-04-05 09:51:38

+0

剛剛再次檢查了控制檯。第一次提交var elementObject = myCollection.findOne({elementID:「avatar」});返回未定義,但調用「elementObject」再次返回該對象。所以它看起來是控制檯顯示行爲? – Poyi 2015-04-05 18:47:39

+0

哪個控制檯?瀏覽器還是終端/服務器?你需要具體。 – 2015-04-06 01:10:05

回答

0

當您在控制檯中運行第二段代碼時,您只會看到undefined這個詞,並且您認爲它返回undefined。但實際情況並非如此。如果第一條語句有效,第二條語句也可以工作。 因此,在運行第二行之後,只需鍵入elementObject並在控制檯中按回車。現在您將能夠看到分配給變量的實際值。

+1

你的答案有幾個問題。首先,根據猜測做出答案通常是一個糟糕的主意,特別是當問題本身不完全完整時(如評論所述)。其次,「u r」,「1st」和未格式化的代碼'elementObject'。最後,你的回答更適合評論,因爲你的解決方案需要提問者的另一個輸入。請相應地編輯/刪除它。 – 2015-04-05 10:07:40

+0

感謝您的評論,它確實看起來像我看到從控制檯「未定義」,但事實並非如此。鍵入「elementObject」再次返回文檔。 – Poyi 2015-04-05 18:54:10

+0

這實際上是發生了什麼事情,瀏覽器控制檯在第一次嘗試時返回了「未定義」,但實際設置了該變量。 – Poyi 2015-04-06 05:25:40

0

您的訂閱尚未準備就緒。您的變量不會一直等到它從您的查詢中得到結果。您必須執行類似於

{{#if YOURHELPER}} template code {{/if}} 

或者使用帶有waitOn的Iron-Router。所以當你的模板都在那裏時被渲染。

https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#the-waiton-option

+0

感謝您的回答,我確實有一個訂閱功能,並且find()有效,我只是無法同時查找和分配。 – Poyi 2015-04-05 18:50:08

相關問題