meteor将异步数据返回给帮助者

时间:2016-06-06 05:43:15

标签: asynchronous meteor

我有这个帮助器,它调用google api函数(getDistance)异步返回它,所以为了帮助它未定义。 如何在结果到达时更新帮助程序?

感谢。

distanceIs: function (destination){
            var origin = Session.get('userLatLng');
            var isDistance =  Blaze._globalHelpers.getDistance(origin, [destination[0], destination[1]] );
            return isDistance;

    }

2 个答案:

答案 0 :(得分:1)

尝试使用已更新的反应变量。

Template.map.onCreated(function () {
  this._distance = new ReactiveVar(0);
});

Template.map.helpers({
  distanceTo() {
    const origin = Session.get('userLatLng');
    someAsynchronousFunction(origin, (err, res) => this._distance.set(res));
  }
  getDistance() {
    return this._distance.get();
  }
});

答案 1 :(得分:1)

而不是像这样:

<template name="map">
  {{#each getDestinations}}
    {{distanceIs this}}
  {{/each}}
</template>

将其更改为:

<template name="map">
  {{#each getDestinations}}
    {{> distance}}
  {{/each}}
</template>

<template name="distance">
  {{getDistance}}
</template>
Template.distance.onCreated(function(){
  this.distance = new ReactiveVar(0)
  var self = this
  googleAPI.getDistance("Point A", "PointB", funciton(result){
    self.distance.set(result.distance)
  })
})
Template.distance.helpers({
  getDistance: function(){
    return Template.instance().distance.get()
  }
})

注意:要使用ReactiveVar,您必须添加reactive-var包。