2012-11-13 12 views
5

Aktualnie nie otrzymuję żadnej wartości zwracanej dla następującej funkcji, pomimo sugestii, że jest to wywołanie synchroniczne. Jeśli robię to asynchronicznie (tj. Function (error, blah) {console.log (blah);}), otrzymuję prawidłowy, zamierzony wynik.Meteor.call ("function", arg) nie występuje synchronicznie

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

Oto kod po stronie serwera dla "get_files" metody:

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

Również tutaj jest częścią HTML, który jest uzyskiwanie nazywa się poprawnie, w przypadku jest to istotne:

<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

czy można wyjaśnić nieco więcej? może krótki przykład. – user1821985

+0

Uważam, że synchroniczny klient-serwer-klient nie jest możliwy w Meteor. 'Meteor.call' jest synchroniczne tylko wtedy, gdy jest uruchomione na serwerze node.js. Inwokacje po stronie klienta z 'Meteor.call' muszą użyć argumentu' asyncCallback', aby uzyskać wyniki z serwera; po stronie klienta wywołania 'call' nie są synchroniczne. (Istnieje jeden wyjątek od tego, ale jest w szczególnym przypadku, gdy 'call' jest zablokowany przed kontaktowaniem się z serwerem i wykonuje synchroniczną operację' call' tylko dla klienta.) – apsillers

Odpowiedz

2

Jeśli zapoznasz się z treścią odpowiednich dokumentów (http://docs.meteor.com/#meteor_call), zobaczysz, że jest napisane:

„Na kliencie, jeśli nie przechodzą wywołania zwrotnego, a nie jesteś wewnątrz odgałęzienie, rozmowa powróci niezdefiniowana, a nie masz możliwości, aby uzyskać wartość zwracaną przez metodę”

So zachowanie widzisz to, czego powinieneś się spodziewać. Myślę, że dokumenty mogłyby być tu nieco jaśniejsze.

+4

Nie rozumiem, co to znaczy dla " kikut" – StefanoCudini

Powiązane problemy