[英]How to get value returned by promise outside the scope using Vue and Firestore
[英]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.