2012-11-13 8 views
5

これは同期呼び出しであるという提案にもかかわらず、現在、次の関数の戻り値を取得していません。私が非同期に行うと(function(error、blah){console.log(blah);})、正しい出力が得られます。ここでMeteor.call( "function"、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'のクライアント側呼び出しは同期的ではありません。 (これには1つの例外がありますが、 'call'がサーバに全く接続できない特別な場合にあり、クライアントのみの同期' call'操作を行います)。 – apsillers

答えて

2

関連する文書(http://docs.meteor.com/#meteor_call)の本文を読むと、次のように表示されます:

"クライアントでは、コールバックを渡さずにスタブ内にいない場合、呼び出しは未定義に戻り、メソッドの戻り値を取得する方法がありません。"

したがって、あなたはあなたが期待するべきものを見ています。私はドキュメントがここで少しはっきりしていると思う。

+4

"スタブ" – StefanoCudini

関連する問題