日期:2014-05-16  浏览次数:20367 次

[自定回调函数]如何在setTimeout函数外做timeout之后的回调函数?
如题,我把一个没有回调接口的(我看不懂的)异步模块比作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

------解决方案--------------------
就单说异步的那块吧,

这种情况只有两种方法改变吧,

一个就是把异步改为同步,

另一个就是放在回调函数里面。

或者,你在外面做一个计时器,一直执行的那种,就是这样。。。

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);



其他的办法,暂时就想不到了。
------解决方案--------------------
1、回调函数
2、同步请求
3、setTimeout 去监视是否执行完毕
------解决方案--------------------
不修改那个没有回调接口的异步模块情况下只有定时检测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