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>
czy można wyjaśnić nieco więcej? może krótki przykład. – user1821985
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