簡體   English   中英

流星-使用來自Meteor.call的返回值麻煩

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM