我想在设置变量后立即执行函数(geoloaction['latitude']
)。我不确定以下代码是否是使用延迟的正确方法。不幸的是,它并没有像我希望的那样工作。
$.when( geolocation['latitude'] ).then( function(){
console.log( 'latitude = ' + geolocation['latitude'] );
});
等待变量设置然后执行函数的最佳/正确方法是什么?
答案 0 :(得分:0)
错误使用时间:
var d1 = $.Deferred();
var d2 = $.Deferred();
var d3 = $.Deferred();
$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {
console.log( v1 ); // v1 is undefined
console.log( v2 ); // v2 is "abc"
console.log( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ]
});
d1.resolve();
d2.resolve( "abc" );
d3.resolve( 1, 2, 3, 4, 5 );
如果您无法在代码上调用函数,则可以使用以下命令检查值:
setInterval(function(){
if(geolocation['latitude'] != undefined){
console.log( 'latitude = ' + geolocation['latitude'] );
}
}, 1);
答案 1 :(得分:0)
我不想使用时间间隔循环,因为我认为必须有更现代的方法来解决这个问题。所以我在stackoverflow上发现了另一个有趣的解决方案,它允许我将事件监听器附加到变量并在设置变量后执行我的代码。
https://stackoverflow.com/a/37403125/4688612
我的解决方案现在看起来像这样:
在我的地理定位脚本中,我使用事件监听器安装变量(纬度和经度)。
geolocation = {
latlonInternal: '',
latlonListener: function(val) {},
set latlon(val) {
this.latlonInternal = val;
this.latlonListener(val);
},
get latlon() {
return this.latlonInternal;
},
registerListener: function(listener) {
this.latlonListener = listener;
}
}
在我的Google地方信息自动填充API中,我注册了侦听器并等待设置变量。
geolocation.registerListener( function(val){
console.log( 'latitude = ' + val[0]);
console.log( 'longitude = ' + val[1]);
});
地理定位服务检索到位置后,它将更新地理位置变量并触发侦听器。
geolocation.lonlat = [ geoipResponse.location.latitude, geoipResponse.location.longitude ];
这样,我的GeoIP代码和Google Paces Autocomplete API完全分离,不需要嵌套。