2012-11-13 84 views
5

儘管建議這是一個同步調用,但我目前沒有獲得以下函數的任何返回值。如果我異步執行它(即function(error,blah){console.log(blah);}),我會得到正確的預期輸出。Meteor.call(「函數」,arg)不同步發生

Template.file_nav.files = function(path) { 
    path = path || "/"; 
    var x = Meteor.call('get_files', path); 
    return x; 
} 

這裏的 「get_files」 的方法在服務器端代碼:

Meteor.methods({ 
    get_files : function get_files(path) { 
     return [ 
     { "name" : " bob" }, { "name" : "alice" }, 
     ]; 
    } 

而且,這裏是一個的得到正確調用HTML部分,如果它是相關的:

<template name="file_nav"> 
    <div> 
    <ul style="dirnav"> 
    {{#each files}} 
    {{#if isDirectory this}} 
     <li><a href="javascript:void(0)" onclick="get_directory('{{name}}')">{{ 
    {{else}} 
     <li><a href="javascript:void(0)" onclick="get_file('{{name}}')">{{name} 
    {{/if}} 
    {{/each}} 
    </ul> 
    </div> 
</template> 
+0

是否可以解釋一點?也許是一個簡短的例子 – user1821985

+0

我相信在Meteor中同步客戶端 - 服務器 - 客戶端往返是不可能的。 'Meteor.call'只在node.js服務器上運行時纔是同步的。 'Meteor.call'的客戶端調用必須使用'asyncCallback'參數從服務器獲取結果; 'call'客戶端調用不同步。 (有一個例外,但在特殊情況下,'call'被阻止與服務器聯繫,並且僅進行客戶端同步調用操作。) – apsillers

回答

2

如果您閱讀相關文檔的主體(http://docs.meteor.com/#meteor_call),您會看到它說:

「在客戶端,如果不傳遞一個回調,你是不是末節裏,調用將返回不確定的,你就沒有辦法讓方法的返回值」

所以行爲你所看到的就是你應該期待的。我認爲這裏的文檔可能會更清晰一些。

+4

我不明白「存根」 – StefanoCudini