Attualmente non ricevo alcun valore di ritorno per la seguente funzione, nonostante il suggerimento che si tratti di una chiamata sincrona. Se lo faccio in modo asincrono (cioè funzione (errore, blah) {console.log (blah);}), ottengo l'output corretto e previsto.Meteor.call ("function", arg) non si verificano in modo sincrono
Template.file_nav.files = function(path) {
path = path || "/";
var x = Meteor.call('get_files', path);
return x;
}
Ecco il codice lato server per il metodo "get_files":
Meteor.methods({
get_files : function get_files(path) {
return [
{ "name" : " bob" }, { "name" : "alice" },
];
}
Inoltre, ecco la parte HTML che viene sempre chiamato in modo corretto, nel caso in cui sia rilevante:
<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>
è possibile spiegare un po 'di più? forse un breve esempio. – user1821985
Credo che un round-trip sincrono client-server-client non sia possibile in Meteor. 'Meteor.call' è solo sincrono quando viene eseguito sul server node.js. Le invocazioni lato client di 'Meteor.call' devono utilizzare l'argomento' asyncCallback' per ottenere risultati dal server; le chiamate di 'call' sul lato client non sono sincrone. (C'è un'eccezione a questo, ma è in un caso particolare in cui 'call' è bloccato dal contattare il server e fa un'operazione di chiamata' sincrona solo client.) – apsillers