具有异步操作的功能,适用于脚本标记和独立操作



假设我在文件中有一个函数:

foo.js:
(function(){
   return {
      loadStuff: function(callback){
         setTimeout(function() { callback() }, 2000) 
      }
   }
})()

我必须以两种不同的方式运行loadStuff

  • 首先:当我通过 JavaScript 引擎本身加载文件时(假设通过 XHR 和 eval ),然后我可以调用它传递回调(这已经是可能的)

  • 第二:当它加载到脚本标签中时,它仍然应该自动调用loadStuff,尽管这次没有回调

我应该如何更改代码以使loadStuff双向工作?不过我不想调用loadStuff两次:所以对于第一种情况,我想用回调来调用它,而不是像第一次加载函数(没有回调)然后再次调用它一样。我只需要它运行一次loadStuff,带有回调。

所以。

  • <script src='foo.js' />时,它应该自动调用loadStuff
  • 当函数是字符串并且我这样做时:

    fn = eval(fnStr)
    fn.loadStuff(function(){
       console.log("stuff loaded")
    })
    

它应该只调用loadStuff一次

尝试

foo.js:

(function(){
   var called = false,
       loadStuff = function(callback){
         called = true;
         setTimeout(function() { callback && callback() }, 2000) 
      };
   setTimeout(function(){!called && loadStuff();}, 13); //autolaunch if needed
   return {
      loadStuff: loadStuff
   }
})()

最新更新