[英]Meteor - Trouble using return value from Meteor.call
我可能在這里顯示了我的javascript無知,但是為什么這不起作用? 我該如何重寫這段代碼以使其正常工作?
// On the client
Template.tabs.title = function () {
var msg;
Meteor.call('getMessage', this.msg_id, function (error, result) {
console.log(result); // Prints out a perfectly fine message object
msg = result;
});
if (msg)
return msg.title;
else
return "(empty)"; // This is always the value that's shown on the page
};
我對問題的理解是在回調可以設置msg變量之前執行了“ if”語句。 那正確嗎? 還是范圍界定問題? 我甚至可以這樣做,從模板中調用“呼叫”嗎?
我在這里使用方法的原因是,Messages集合可能很大,而我不能在客戶端上整體訂閱它。 我有部分訂閱,但無論我的訂閱有什么可用,我都需要查找任意消息。
當您檢查msg
時,尚未設置回調是正確的。 我想最好的辦法是在回調返回時設置一個Session
var,並在發生這種情況時依靠Meteor的反應性重繪消息。 就像是:
Template.tabs.title = function () {
var title = Session.get('currentTitle');
if (title) {
return 'title';
else {
Meteor.call('getMessage', this.msg_id, function (error, msg) {
Session.set('currentTitle', msg ? msg.title : "(empty)");
});
}
};
另一方面,我可能會說使用單一消息訂閱來獲取“當前消息”會更有意義並且更慣用。
為“ call”方法傳遞的第三個參數是異步回調,當您嘗試返回“ msg”變量時,尚未定義。
使用另一個回調,如下所示:
Template.tabs.retrieveTitle(callback){
Meteor.call('getMessage', this.msg_id, function (error, result) {
callback( (result) ? result.title : "(empty)" );
});
}
您可以通過以下方式使用上述方法:
Template.tabs.retrieveTitle(function(){
//do what you want to
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.