Javascript Meteor补偿异步性

Javascript Meteor补偿异步性,javascript,node.js,asynchronous,meteor,Javascript,Node.js,Asynchronous,Meteor,我试图在Meteor中创建一个方法,读取一个文件并输出结果。下面是我的代码 服务器: Meteor.methods({ retTemplate: function(templateName){ var fs = Npm.require('fs'); var ret; fs.readFile("./../../../../../client/" + templateName + ".html",{encoding: 'utf8'}, function(err, data

我试图在Meteor中创建一个方法,读取一个文件并输出结果。下面是我的代码

服务器:

Meteor.methods({

retTemplate: function(templateName){

    var fs = Npm.require('fs');
    var ret;
    fs.readFile("./../../../../../client/" + templateName + ".html",{encoding: 'utf8'}, function(err, data) {

    if(err)
        return "ERROR";

    console.log(data);

    return data;
    }); 

  }
});
客户:

    Meteor.call('retTemplate', submitName, Meteor.user(), function(e, r){
      console.log(r);
      $('#editTempData').val(r);
    });
服务器端的代码可以工作(服务器端控制台使用html文件的内容进行更新),但该方法会将未定义的返回给客户端。我相信这是由于Meteor的异步功能。有办法解决这个问题吗?我胡闹了一会儿,都没用

谢谢


编辑:我认为如果没有调用readFile方法,它会起作用,因为这会设置一个双重异步调用,这可能是问题所在,但我不知道如何修复它。

你不能从异步方法返回值,然后像那样返回给客户端。这里有一个替代(但不是理想的)解决方案


在客户端/服务器上创建一个
新Meteor.Collection
,只需订阅/发布此集合即可。将从
fs.readFile()
返回的数据保存到您的集合中,发生这种情况时,您的客户端将自动收到通知。

我找到了答案。我需要利用未来

工作服务器:

Meteor.methods({

retTemplate: function(templateName){


    var Future = Npm.require('fibers/future');
    var fut = new Future();
    var fs = Npm.require('fs');
    var ret;
    fs.readFile("./../../../../../client/" + templateName + ".html",{encoding: 'utf8'}, function(err, data) {

    if(err)
        return "ERROR";

    console.log(data);
    fut['return'](data);

    }); 
    return fut.wait();


  }
});

谢谢你的回复。我在Node.js中找到了一个未来的类,它也解决了这个问题。