从帮助程序异步返回值
Return value from helper asynchronously?
getCurrentPosition() 是异步的,那么如何从帮助程序返回值呢?
Template.pos.helpers({
'nearestLocation': function() {
var location = undefined;
if('geolocation' in navigator) {
navigator.geolocation.getCurrentPosition(function(position) {
location = Locations.findOne({
geolocation: {
$near: {
$geometry: {
type: 'Point',
coordinates:[153.0415850, -27.4477160]
},
$maxDistance: 500
}
}
});
console.log(location.name);
return location.name;
});
}
}
});
查找工作正常,因为控制台确实输出了正确的结果。我是否错过了一些关于流星工作方式的我应该知道的东西?
只需使用 Session
变量或其他反应式数据源,在找到位置时强制帮助程序重新运行:
Template.pos.helpers({
nearestLocation: function() {
var position = Session.get('position');
// only bother doing the find if the position is set
if (position) {
// use position in the find
var location = Locations.findOne(...);
return location.name;
}
}
});
Template.post.rendered = function() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
// set the session variable when/if position is found
Session.set('position', position);
});
}
};
如果值
是异步检索的,则不能直接从函数返回值。 该函数在检索异步值之前返回 U。
解决此问题的常用方法是将回调传递到函数中,然后主机函数调用回调并在检索值时向其传递值。
如果在您使用的基础架构中,nearestLocation
函数需要同步(例如,它不能使用回调或返回稍后返回值的承诺),那么您就有点不走运了,因为您无法从 Javascript 中的同步接口返回异步值。 这是做不到的。
我知道的唯一可能的解决方法是以某种方式预测在需要之前很久就需要什么值,以便您可以异步检索所需的值,将其存储起来,然后在对该值发出同步请求时,可以返回它,因为它之前已被检索。
这需要对将请求的内容有高级了解,并提前有足够的时间在需要之前实际检索它。
比回调模式更好的方法是从函数返回一个 promise 对象,该函数有一个 then() 方法,该方法在解析时被调用,因此您可以将响应的处理程序链接到请求上,如下所示:
getCurrentPosition().then(function(result) {});
承诺在ES6中是原生的,但是你今天使用它们,你必须使用转译器或专门用于像q这样的承诺的库。
相关文章:
- 从异步函数返回值
- 如何从一系列级联异步代码中返回值
- javasctipt-返回值的异步问题
- 从帮助程序异步返回值
- AngularJS如何从异步调用返回值
- jQuery deferred:用于延迟函数的返回,直到函数内的异步调用完成+获取返回值
- 从具有异步函数的 Node.js 模块返回值
- 如何在 javascript 中传播嵌套异步函数的返回值
- 异步函数的 JavaScript 回调:是否有任何模式可以区分“返回值”和“异常”
- 异步函数后返回值
- 从 Nodejs 中的异步函数返回值
- Nodejs中异步函数的返回值
- 如何使用OOP使异步ajax请求在完成时返回值
- 使用JavaScript中的异步Web方法返回值触发/阻止页面事件
- 可以't从节点模块中的异步瀑布中获取返回值
- Node.js:从内部有异步调用的函数返回值
- 从NodeJS中的异步函数返回值
- 从JavaScript中的异步函数返回值
- 当内部函数异步执行某些操作时,如何从外部函数的回调返回值
- NodeJS获得异步返回值(回调)