2016-09-06 72 views
0

我是流星的新手。我正在使用以下代码来读取存储在服务器上的文件。流星同步和异步调用读取文件

客户端

Meteor.call('parseFile', (err, res) => { 
    if (err) { 
    alert(err); 
    } else { 
    Session.set("result0",res[0]); 
    Session.set("result1",res[1]); 
    Session.set("result2",res[2]); 
    } 
}); 
let longitude = Session.get("result0"); 
let latitude = Session.get("result1"); 
var buildingData = Session.get("result2"); 

服务器端

Meteor.methods({ 
    'parseFile'() { 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    return rows; 
    } 
}) 

的问题是,我给它需要时间来将结果发送回,因此只要我一个电话我使用纬度和经度给它未定义和分页符。那么,是否有解决方案来避免这个问题。其中一个解决方案可以是进行同步调用并等待结果返回。

+1

“一个解决方案可以使同步调用”,而不是在客户端上,没有。你不能在客户端上进行同步调用,你需要使你的页面健壮。我会建议实现一个“加载页面”,等待直到会话变量设置为只显示那个页面中断的那个页面。 –

回答

0

可以使服务器运行的方法同步使用futures package,应强制客户端等待的方法来完成。

它可能是这个样子:

Meteor.methods({ 
    'parseFile'() { 
    var future = new Future(); 
    var csv = Assets.getText('buildingData.csv'); 
    var rows = Papa.parse(csv).data; 
    future.return(rows); 
    future.wait(); 
    } 
}); 

这就要求你安装包期货上面和设置包括在适当的包含您Meteor.methods()定义文件链接。您也可以在您的方法内查看良好的错误处理。

更新: 指向Future包的链接是NPM包,您可以阅读关于here的链接。上面的链接是气氛包,看起来像一个旧的包装包。

+0

是“期货”套餐npm还是大气? – Optymystyc

+0

这是一个NPM包。通过链接到NPM版本添加了更新。 – NFab