流星同步和异步调用读取文件

Meteor synchronous and asynchronous call to read a file

本文关键字:读取 文件 调用 异步 同步 流星      更新时间:2023-09-26

我是Meteor的新手。我使用以下代码读取存储在服务器上的文件。

客户端

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;
  }
})

问题是,当我打电话时,需要时间将结果发送回来,因此无论我使用纬度和经度,它都会给出未定义和分页符。那么,有没有办法避免这个问题呢?一种解决方案是进行同步调用并等待返回结果。

您可以使用futures包使服务器方法同步运行,这将强制客户端等待方法完成。

它可能看起来像这样:

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包,你可以在这里阅读。上面的链接是大气包,它看起来像一个旧的包装器包。