Ich bekomme derzeit keinen Rückgabewert für die folgende Funktion, trotz des Vorschlags, dass es sich um einen synchronen Aufruf handelt. Wenn ich es asynchron mache (d. H. Funktion (Fehler, blah) {console.log (blah);}), bekomme ich die richtige, beabsichtigte Ausgabe.Meteor.call ("function", arg) tritt nicht synchron auf
Template.file_nav.files = function(path) {
path = path || "/";
var x = Meteor.call('get_files', path);
return x;
}
Hier ist der serverseitigen Code für die "get_files" Methode:
Meteor.methods({
get_files : function get_files(path) {
return [
{ "name" : " bob" }, { "name" : "alice" },
];
}
Auch hier ist der HTML-Teil, der richtig genannt zu werden, falls es ist relevant:
<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>
ist es möglich, ein bisschen mehr zu erklären? vielleicht ein kurzes Beispiel. – user1821985
Ich glaube, dass ein synchroner Client-Server-Client-Umlauf in Meteor nicht möglich ist. 'Meteor.call' ist nur dann synchron, wenn es auf dem node.js-Server ausgeführt wird. Clientseitige Aufrufe von 'Meteor.call' müssen das' asyncCallback'-Argument verwenden, um Ergebnisse vom Server zu erhalten; clientseitige Aufrufe von "call" sind nicht synchron. (Es gibt eine Ausnahme, aber es ist in einem speziellen Fall, in dem "Anruf" von der Kontaktaufnahme mit dem Server überhaupt blockiert wird, und eine synchrone Call-Operation nur für den Client durchführt.) – apsillers