JavaScript回调函数是怎么实现非阻塞的?

代码如下:


function Breakfast() {

  var str = 'breakfast';

  console.log('Having breakfast');

  // 使用回调函数

  eat(str, function() {

    console.log('Finished ! Time to go to work!' + str);

  });

}



function Lunch() {

  var str = 'lunch';

  console.log('Having Lunch');

  // 使用回调函数

  eat(str, function() {

    console.log('Finished ! Time to go to work!' + str);

  });

}


function eat(str, callback) {

  (function() {

    var start = new Date().getTime();

    // 这里让它等待两秒才继续执行后续代码

    while ((new Date().getTime() - start) < 2000) {}

  }());

  // 等待2秒后才执行

  callback(str);

}



Breakfast();

Lunch();

运行结果:

Having breakfast

Finished ! Time to go to work!breakfast

Having Lunch

Finished ! Time to go to work!lunch

问题:我在eat函数中用了一个while循环,让他等待两秒再继续执行回调函数,如果是非阻塞的话,应该就不会等待而是直接输出下一段的Having Lunch才对吧?? 所以按照回调函数非阻塞,结果应该是:

Having breakfast

Having Lunch

Finished ! Time to go to work!breakfast

Finished ! Time to go to work!lunch

真的没弄明白JS回调函数和非阻塞是怎么实现的。如果要做到上述的输出结果,代码应该怎么改,能做到吗?


慕桂英546537
浏览 445回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript