【发布时间】:2018-01-19 00:39:24
【问题描述】:
我正在通过Meteor.call() 函数从我的客户端代码调用服务器方法。
但是当我尝试将回调函数的返回值传递给onCreated 函数中的变量时,我得到了一个未定义的值。
查看这个解决方案,结果仍然只在回调范围内可用:
https://stackoverflow.com/a/31661065/1829251
此外,当我阅读 Meteor-call 的文档时,它解释了该方法是异步的,这解释了函数的返回值不能分配给变量:
https://docs.meteor.com/api/methods.html#Meteor-call
问题:
如何从客户端的 Meteor.call 方法返回结果?
客户端代码的代码sn-p:
import { Template } from 'meteor/templating';
import { Meteor } from 'meteor/meteor';
import { Datasets } from '../../../../api/datasets/datasets.js';
import { Constants } from '../../../../startup/constants.js';
import './rollup-history.html';
import './rollup-history.scss';
Template.rollup_history.onCreated(function() {
this.historyDays = 7;
this.rollupHistoryMECTitles = () => {
let mecObjects = [];
// Query the MEC calendar dates from AppConfiguration collection
let method = Constants.Methods.getAppConfigCollectionFromKeyDateSorted;
mecObjects = Meteor.call(method, Constants.AppConfigKeys.meccalendarInitialValues, this.historyDays, (error, result) => {
if(error){
console.log("Error retrieving MEC Dates" + error);
}
//Logging values here shows the values as expected
console.log("MEC Dates in View" + JSON.stringify(result));
return result;
}
);
//logging value here shows undefined value
console.log("mec objects: " + JSON.stringify(mecObjects));
return mecObjects;
};
});
Template.rollup_history.helpers({
mecHeaderColumns: function() {
return Template.instance().rollupHistoryMECTitles();
},
});
【问题讨论】:
-
不如你尝试创建一个模板响应变量。在
Meteor.call的函数内将该变量分配为Template.instance().x.set(result) -
你到底想做什么?从 onCreated() 返回值对您意味着什么?即使没有方法调用,这对我来说也没有意义。
标签: javascript asynchronous meteor callback