Tôi hiện không nhận được bất kỳ giá trị trả về nào cho chức năng sau, mặc dù gợi ý rằng đây là cuộc gọi đồng bộ. Nếu tôi làm điều đó một cách không đồng bộ, (tức là hàm (lỗi, blah) {console.log (blah);}), tôi nhận được kết quả chính xác, dự định.Meteor.call ("function", arg) không xảy ra đồng bộ
Template.file_nav.files = function(path) {
path = path || "/";
var x = Meteor.call('get_files', path);
return x;
}
Dưới đây là đoạn mã server-side cho phương pháp "get_files":
Meteor.methods({
get_files : function get_files(path) {
return [
{ "name" : " bob" }, { "name" : "alice" },
];
}
Ngoài ra, đây là một phần HTML đó là nhận được gọi một cách chính xác, trong trường hợp nó có liên quan:
<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>
có thể giải thích thêm một chút không? có lẽ là một ví dụ ngắn. – user1821985
Tôi tin rằng một chuyến đi khứ hồi client-server-client đồng bộ là không thể trong Meteor. 'Meteor.call' chỉ đồng bộ khi nó chạy trên máy chủ node.js. Các lời gọi phía máy khách của 'Meteor.call' phải sử dụng đối số' asyncCallback' để nhận kết quả từ máy chủ; các lời gọi phía máy khách của 'cuộc gọi' không đồng bộ. (Có một ngoại lệ cho điều này, nhưng trong trường hợp đặc biệt khi 'call' bị chặn liên lạc với máy chủ, và thực hiện thao tác' gọi' đồng bộ chỉ với máy khách.) – apsillers