2013-10-27 73 views
5

这已经困扰了我一段时间,所以我想我只是做一个快速的QA就可以了:写作/转换流星同步功能

如果一个人有一个正常的模块的NodeJS或东西,它有一个异步函数在服务器端。我如何使它同步。例如,我将如何将nodejs fs.stat异步函数转换为同步函数。

e.g我

服务器端JS

Meteor.methods({ 
    getStat:function() { 
     fs.stat('/tmp/hello', function (err, result) { 
      if (err) throw err; 
      console.log(result) 
     }); 
    } 
}); 

如果我把它从客户端,我回去undefined我的结果,因为结果是一个回调。

回答

7

有一个功能(无证)称为Meteor.wrapAsync

简单地包裹起来功能

Meteor.methods({ 
    getStat:function() { 
     var getStat = Meteor._wrapAsync(fs.stat); 

     return getStat('/tmp/hello'); 
    } 
}); 

现在你会得到这个在你Meteor.callresult结果。您可以转换任何具有回调的异步函数,其中第一个参数是错误,第二个参数是结果。

+0

但是,如何检查错误? – zimt28

+0

@ zimt28它会抛出错误,而不是通过回调传递它们,你可以使用'try .. catch'来检查它们 – Akshat