【问题标题】:How to add a callback to a function in javascript如何在javascript中为函数添加回调
【发布时间】:2023-03-18 05:21:01
【问题描述】:

我有两个 javascript 函数

function one () {
   do something long... like writing jpgfile on disk
}

function two () {
   do something fast... like show the file
}

我这样称呼它(在 jQuery 中)

 one ();
 two ();

因为函数二需要函数一的链接文件,我需要确保执行完成......所以在函数一的回调中获取函数二应该是诀窍..但是怎么做呢?

注意:我确实在这两个函数之间放置了一个警报('aaa'),让功能一个完成,它工作正常......当警报被评论(删除)时,没有任何工作了!

【问题讨论】:

    标签: javascript jquery function callback


    【解决方案1】:

    如果你在做异步操作,你只需要使用回调,否则不管需要多长时间,下一个函数在第一个函数完成之前不会运行。

    回调只是将一个函数作为参数传递,然后在完成后调用它。

    function one (callback) {
       do something long... like writing jpgfile on disk
       callback();
    }
    
    function two () {
       do something fast... like show the file
    }
    
    one(two);
    

    显然,如果您正在执行异步操作,那么您需要一些能够告诉您何时完成的操作(例如事件触发)。

    【讨论】:

      【解决方案2】:

      简单:

      function one (callback) {
         do something long... like writing jpgfile on disk
      
          if(callback) callback();
      }
      
      function two () {
         do something fast... like show the file
      }
      
      one(two);
      

      【讨论】:

      • 不确定我是否理解....将功能一放入功能二有意义...但我不理解 IF
      • @menardmam,如果没有回调传递到函数中,IF 就在那里。
      • @menardmam.... if 语句用于验证参数在调用之前是否实际分配了一个函数。基本上你可以调用function one 有或没有回调参数。示例:one();one(two);
      • 我觉得这和两个函数一个一个调用没什么区别。如果它是异步的(比如 jquery .load),你需要一个更好的方法。
      • 注意:one(two) 而不是one(two())。只是说:)
      【解决方案3】:

      试试这个,

      $.when($.ajax(fuction1())).then(function () {
      
      fuction2;
      
      });
      

      这里 fuction1 是您要调用的第一个函数,而 fuction2 是您要调用的第二个函数。

      【讨论】:

        【解决方案4】:

        我认为如果浏览器在执行下一行命令之前等待“one()”中的进程完成,这很容易。冰山撞上了泰坦尼克号,因为它不等待。然后执行这个:

        one(two) // while two is the callBack parameter
        

        与以下没有什么不同:

        one()
        two()
        

        我建议使用 setInterval。

        function one(){
            //--- Write the file to disk
            //.....................
        }
        
        function runTwo(){
            if (check_the_written_file_existence){
                 clearInterval(t)
                 two();
            }
        }
        var t = setInterval("runTwo()",500)
        

        最重要的一点是,如果在函数“one()”中的“长进程”完成后触发了事件,则只需将函数二绑定到该事件。除非,你必须每隔一段时间检查一次结果,直到它真正完成。

        【讨论】:

          猜你喜欢
          • 2023-03-07
          • 2013-12-18
          • 1970-01-01
          • 1970-01-01
          • 2022-06-30
          • 1970-01-01
          • 2022-08-03
          • 2016-12-09
          • 1970-01-01
          相关资源
          最近更新 更多