[自定回调函数]如何在setTimeout函数外做timeout之后的回调函数?

nonjene 2013-12-28 10:03:45
如题,我把一个没有回调接口的(我看不懂的)异步模块比作setTimeout(应该可以这样比吧?),然后有以下代码:

function main(callback) {
var a = 10;
setTimeout(function(){
a+=1;
},1000);
callback(a);
}
function b(a){
alert(a);
}
main(b); //alert结果是10,不是11

问题:请问当不把callback放进setTimeout的回调的话,如何在time out完成后才调用callback呢?
不结帖没jb
...全文
467 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2013-12-29
  • 打赏
  • 举报
回复
引用 2 楼 crying_boy 的回复:
setTimeout执行时间在1秒后,在它执行之前callback函数就已经执行过了,你想得到11的结果,就把callback置入setTimeout之内
function main(callback) { var a = 10; setTimeout(function(){ a+=1; callback(a); //放里面来,放下面都还没有执行a+=1都执行过callback了 },1000); } function b(a){ alert(a); } main(b); //alert结果是10,不是11
hch126163 2013-12-29
  • 打赏
  • 举报
回复
1、回调函数 2、同步请求 3、setTimeout 去监视是否执行完毕
nonjene 2013-12-29
  • 打赏
  • 举报
回复
多谢各位前辈总结!
天际的海浪 2013-12-29
  • 打赏
  • 举报
回复
不修改那个没有回调接口的异步模块情况下只有定时检测a的值一个办法了

function main(callback) {    
	var a = 10;
	setTimeout(function(){
		a+=1;
	},1000);
	var temp = a;
	var _Inter = setInterval(function(){
		if(temp!=a)
		{
			clearInterval(_Inter);
			callback(a); 
		}
	},100);
} 
function b(a){ 
	alert(a); 
}
main(b); //alert结果是10,不是11
张运领 2013-12-28
  • 打赏
  • 举报
回复
就单说异步的那块吧, 这种情况只有两种方法改变吧, 一个就是把异步改为同步, 另一个就是放在回调函数里面。 或者,你在外面做一个计时器,一直执行的那种,就是这样。。。
function main(callback){
		var a = 10,flag = false;
		setTimeout(function(){
			a++;
			flag = true;
		},1000);
		
		function aaa(){
			if(flag){
				callback(a);
			}else{
				setTimeout(aaa,200);
			}
		}
		aaa();
	}
	function b(a){
		alert(a);
	}
	
	main(b);
其他的办法,暂时就想不到了。
泡泡鱼_ 2013-12-28
  • 打赏
  • 举报
回复
setTimeout执行时间在1秒后,在它执行之前callback函数就已经执行过了,你想得到11的结果,就把callback置入setTimeout之内
zhjdg 2013-12-28
  • 打赏
  • 举报
回复
这种问题只有2中做法: 1.回调函数。 2.setInterval 一定时间检测,反正检测到就执行,让后就结束检测。

87,920

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧