2012-02-28 76 views
0

是否可以包装类似setTimeout的函数,然后触发回调函数。就像jQuery $(selector).on('action', callback)一样。实现回调函数的自定义解决方案

var obj = { 
    mth1: function (callback) { 
     //----need to wrap to something 
      setTimeout(function() { console.log("1"); }, 1000); 
      console.log('2'); 
     //---- 
     // callback; 
    } 
}; 
function callback() { 
    console.log('3'); 
}; 
(function() { obj.mth1(callback); })(); 

我需要什么:

2 
1 
3 
+0

是否有任何理由,你不能简单地运行'回调()后''的console.log(1)'的'setTimeout'功能? – 2012-02-28 14:24:38

+0

这是具体的情况,下面我写了另一种情况,我可以重新发布:但想象一下,这将是另一个代码,而不是setTimeout,它将返回pdf或错误消息(如果生成PDF失败)。所以我需要等待响应会返回,如果响应正常 - 比调用下载对话框,否则如果响应返回500 - 在标签中显示错误消息。如果从ajax返回pdf,我无法知道如何调用下载对话框。 – WISEMAN 2012-02-29 12:14:00

回答

2

只需在你的函数结束时setTimout

// *snip* 
setTimeout(function() { 
    console.log("1"); 
    callback(); 
}, 1000); 
// *snip* 
+0

是的这个解决方案将工作。 – WISEMAN 2012-02-29 10:21:30

+0

但想象一下,这将是另一个代码,而不是setTimeout,它将返回pdf或错误消息(如果生成pdf失败)。所以我需要等待响应会返回,如果响应正常 - 比调用下载对话框,否则如果响应返回500 - 在标签中显示错误消息。我不知道如何打电话给下载对话框,如果pdf从ajax返回 – WISEMAN 2012-02-29 10:30:00

0

不知道你要问什么里面添加它。只要确保它是一个函数,并调用它:

mth1: function (callback) { 

    //----need to wrap to something 
    setTimeout(function() { 
     console.log("1"); 
     // be sure it is a function 
     if (callback&& getType.toString.call(callback) == '[object Function]';) { 
     // call it 
     callback(); 
     } 
    }, 1000); 

    console.log('2'); 

} 
+0

仍然有相同的结果:2; 3; 1 – WISEMAN 2012-02-29 10:19:47

+0

对不起,我没有看到部分*“我需要:2,1,3”* 。您可以在setTimeout函数内调用回调函数。如我的答案所示,Juts确保检查“回调”是可执行函数,因此如果将无效回调作为参数传递,您的代码不会中断。 – 2012-02-29 10:24:56

相关问题