Javascript,简单的回调示例没有按预期工作

时间:2018-05-01 08:39:02

标签: javascript callback settimeout

首先,非常感谢任何想看看我的问题的人。这是完全基本的,但我不知道。我查看了所有教程,但异步回调让我发疯。 非常感谢你们的帮助,来自德国的问候:)

如果有人能告诉我为什么下面的代码没有按预期登录到控制台。 预期意味着,在Timeout功能完成后调用回调。 相反,我的控制台首先记录回调? 我在这里还有什么问题?

function doHomework(subject, callback) {
  setTimeout(function () {
   console.log(`Starting my ${subject} homework.`);
  }, 10);
  callback();
}

doHomework('math', function() {
  console.log('Finished my homework');
});

2 个答案:

答案 0 :(得分:1)

您需要在setTimeout

中调用回调函数
function doHomework(subject, callback) {
  setTimeout(function () {
   console.log(`Starting my ${subject} homework.`);
   callback();
  }, 10);
}

答案 1 :(得分:1)

问题是您在setTimeout函数之外执行回调。 Javascript异步执行代码,这意味着它不会等到上一个代码完成"在继续下一行之前。

因此,当您致电doHomework时,它将启动计时器,并立即继续执行下一行代码,即回调。 然后,当10ms结束时,执行超时内的代码。 为了获得所需的结果,您必须将回调执行放在setTimeout函数中,如下所示:

function doHomework(subject, callback) {
   setTimeout(function () {
      console.log(`Starting my ${subject} homework.`);
      callback();
   }, 10);
}