js中怎么让程序暂停一段时间
异步执行的函数需要使用回调来获取返回值你那种想等待回调函数执行后再把结果作为返回值的想法是无法实现,并且是极不可取的因为你并不知道需要多久该回调函数才能执行,让主线程阻塞在这儿等待不是一个正确的做法。
正确的做法还是在回调函数中获得值进行处理推荐写法:
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 marker = new BMap.Marker(gpsPoint); bm.addOverlay(marker);
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);//这儿就可以使用这个值了 });
但可以使用setTimeout或setInterval可以让js在需要的时候启动一个定时器。
需要延迟运行的代码放到setTimeout或setInterval块内即可。
如下代码即实现了类似功能
<script>
alert('现在开始运行程序脚本');
alert('脚本1');
alert('脚本2');
setTimeout(function(){
alert('脚本3');
},10000);
alert('脚本4');
</script>
上面的脚本执行后,浏览器会依次弹出4个对话框,分别显示内容“现在开始运行程序脚本”,“脚本1”,“脚本2”,“脚本4”,当你点掉显示“脚本4”的对话框以后(尽量立即点掉),大约过10秒左右会弹出第五个“脚本3”的对话框。
另外,虽然while、if等以时间为条件的循环,强制执行死循环可以达到阻塞程序代码运行的目的,但会极大的消耗系统资源,一般开发程序是要严格避免这种方式的。
var dateStart = new Date(),
dateEnd;
//console.log('暂停开始');
while( ((dateEnd = new Date()) - dateStart) <= 1000){
//console.log('暂停时间');
}
//console.log('暂停结束');
1000 是毫秒的计量, 代表1秒
把暂停后需要执行的代码 放到一个函数里 然后用是settimeout 设定多久后执行