【问题标题】:Callback function doesn't exectute回调函数不执行
【发布时间】:2017-01-10 12:01:54
【问题描述】:

所以,我有两个函数,我希望第二个函数在第一个函数完成后执行。

是这样的:

$('.link').on('click', function(e){
  e.preventDefault();

  function myLoopOne () {      
    console.log('first function executed');
  }

  function myLoop () {          
    console.log('second function executed');
  }

  myLoopOne(function(){
    myLoop();
  });

});

不幸的是,只有第一个函数执行,回调函数 myLoop() 没有被调用。

谁能告诉我我做错了什么?

【问题讨论】:

  • 你在哪里调用回调?您将函数作为参数传递给 myLoopOne,但代码缺少执行部分。

标签: javascript jquery function callback


【解决方案1】:

你需要使用你提供给myLoopOne()的函数的引用并调用它,像这样:

$('.link').on('click', function(e) {
  e.preventDefault();

  function myLoopOne(callback) { // < receive the function reference
    console.log('first function executed');
    callback && callback(); // < call the referenced function, if one was provided
  }

  function myLoop() {
    console.log('second function executed');
  }

  myLoopOne(function() {
    myLoop();
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="link">Click me</button>

请注意,此模式仅适用于异步代码。如果你在同步工作,那是多余的。

【讨论】:

  • 这是更好的答案。
【解决方案2】:

试试这个,需要在调用另一个函数的函数内部添加回调作为参数和方法调用。不仅是回调,您可以将任何单词作为参数和方法调用传递。

$('.link').on('click', function(e) {
  e.preventDefault();
  myLoopOne(myLoop);
});

// need to add callback as a parameter and method call inside the function which call another function
function myLoopOne(callback) {
  console.log('first function executed');
  callback();
}

function myLoop() {
  console.log('second function executed');

}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="link">Click me</button>

【讨论】:

    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多