繁体   English   中英

流星使用Method.call返回的值超出函数范围

[英]Meteor using value returned by Method.call outside function scope

在下面的代码中,res是一个二维数组,其中包含服务器返回的.csv数据。

var result;
Meteor.call('parseFile', (err, res) => {
    if (err) {
        alert(err);
    } else {
        // success!
        alert(res[0][0]);
        result = res
    }
});
let longitude = result[0];

我正在使用上面的代码。 结果变量中存储的值为空,但是在警报中,变量res中存储有值。 我在网上搜索,他们说这是由于某种纤维原因,建议使用会话变量。 但是,我也无法得到正确的答案。 因此,我的问题基本上是如何使用存储在res变量中的服务器返回的数组在函数范围之外使用。

这是经典的异步呼叫问题。 请参阅: 如何从异步调用返回响应?

通常的方法是将依赖于异步任务结果的任何指令(如let longitude = result[0] )放在该任务的回调中

在Meteor客户端代码中,您还可以在反应性范围内编写指令(例如,在Blaze帮助器中,或使用Tracker.autorun() / Blaze模板this.autorun() ,然后将Reactive Variable用于result 。它被你设置 Meteor.call()您的反应范围将重新运行,此时使用更新后的值。

为此,您应该使用反应变量, 请参阅此处以获得更好的见解

请参阅以下html文件示例,并在其中添加以下内容并进行适当的更改

<template name="test">
    <!-- Here is where you want your data -->
    <p>{{test}}</p>
</template>

在js文件上,添加以下内容

Template.test.onCreated(function() {

  this.test= new ReactiveVar();

  Meteor.call('parseFile', (err, res) => {
    if (err) {
      console.error(err);
    } else {
      // Set data into a reactive variable
      this.test.set(res);
    }
  });
});

Template.test.helpers({
  test: function() {
    // Helper will automatically rerun on method res
    return Template.instance().test.get();
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM