Meteor同步和异步调用来读取文件

时间:2016-09-06 01:36:39

标签: javascript meteor

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

问题是我打电话时需要时间将结果发回去,因此无论我在哪里使用纬度和经度,都会给出未定义和分页符。那么,是否有任何解决方案可以避免这个问题。其中一个解决方案是进行同步调用并等待返回结果。

1 个答案:

答案 0 :(得分: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。上面的链接是大气包,它看起来像一个旧的包装包。