js似乎没有休眠这一概念吧楼主为什么不用回调机制呢?等你的地图加载好了,再触发一个回调函数不就OK了嘛实在是要强行实现楼主的效果的话,我想大概只能用循环了,用循环不断的去判断addre,直到addre有值再跳出循环,但是这样太耗CPU了不可取哦
解决方案 »
- 做一个新闻类网站群后台,有什么推荐的开源项目可供参考?或者能推荐些可以使用的技术?
- 求一段js
- Ext.data.Store怎么获得服务器返回的错误数据
- <INPUT TYPE="radio" NAME="Sex" value="1">怎么用javascript判断选中了哪个值?
- 帮忙,看看这段代码实现的什么功能?谢谢。。。
- 页面自动刷新问题???
- 也许对您简单,但对我不简单,调用本地exe问题,高手指教
- 如何 在 javascript 中将字符型转换成数字
- 通过js判断输入是否为数字改如何写?
- 关于打印的一个问题
- 如何用JS清空label的值
- 点击aa,数字加一,点击bb,数字减一,数字最小值不能为0,不能为负数.
你那种想等待回调函数执行后再把结果作为返回值的想法是无法实现,并且是极不可取的
因为你并不知道需要多久该回调函数才能执行,让主线程阻塞在这儿等待不是一个正确的做法,万一通讯故障回调函数一直不执行怎么办?你的程序就卡死在这儿了??
所以正确的做法还是在回调函数中获得值进行处理推荐写法:
var addre ="";
var bm = new BMap.Map("container");
gpsxy = function (xx,yy,i,callback){//添加一个参数作为回调函数,该函数可以获取addre参数
var gpsPoint = new BMap.Point(xx,yy);
bm.clearOverlays();
var er = new BMap.Marker(gpsPoint);
bm.addOverlay(er);
bm.setCenter(gpsPoint);
var gc = new BMap.Geocoder();
gc.getLocation(gpsPoint, function(rs){
var addComp = rs.addressComponents;
addre = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
check();
if(callback) callback(addre);//把addre传递到回调函数中,这样就可以在函数外部使用返回值了
});
}调用示范:
gpsxy(10,10,1,function(addre){
alert(addre);//这儿就可以使用这个值了
}
);
<head>
<title></title>
<script src="../jquery/jquery-1.7b2.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
//数据检查
function Check() {
return $("#txtName").val();
}
var timerID = null;
//等待检查完成
function WaitingToCheck(callback) {
var checkResult = Check();
if (checkResult && checkResult != "") { //符合条件回调
if (callback && $.isFunction(callback)) {
if (timerID) {
clearTimeout(timerID);
}
callback();
}
return;
}
timerID = setTimeout(function () {
WaitingToCheck(callback);
}, 1000);
}
//
WaitingToCheck(function () {
alert("符合条件");
//继续执行下
}); });
</script>
</head>
<body>
<input id="txtName" type="text" />
</body>
</html>
{
var gc = new BMap.Geocoder();
var addre;
gc.getLocation(gpsPoint, function(rs){
var addComp = rs.addressComponents;
addre = addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber;
alert(addre+"反解析地址GPsXY");
// var addr = "locationXH"+i;
// document.getElementById(addr).value=address;
document.getElementById("address").value=addre;
//// return addre;
});
return addre;
}function check(callback)
{
var address = callback;
//alert("callback");
// var addr = "locationXH"+i;
// document.getElementById(addr).value=address;
// return addre;
address = document.getElementById("address").value;
alert("蛸蛸"+address);
return address;
}//调用var a = check(TestCallBack(gpsPoint));