回调函数和异步应用

callback function and asynchronous application

我刚看完书"JavaScript: The Good Parts"。
在回调函数部分有一个例子

坏方法:

   request = prepare_the_request();
    response = send_request_synchronously(request);
    display(response);

推荐方式:

request = prepare_the_request();
send_request_asynchronously(request, function(response){
    display(response);
  }):


问题是我无法理解错误方式示例的区别和效果。
谁能简单解释一下?

同步方法停止你的程序。异步方法让它继续,并在完成时通知您。这在浏览器中尤其糟糕,例如 - 如果您的程序阻塞,则其他任何事情都无法完成,包括响应按钮、重新绘制屏幕、为漩涡状的 GIFS 设置动画……什么都没有。

打个比方,让我们看看告诉您的孩子在晚餐前清洁 table。在异步场景中,您告诉孩子清理 table,然后看着他。铃响了,客人来了,但你正忙着看着你的孩子打扫 table。他吃完后,你点点头,然后去开门,把午餐端出来。客人们因为你让他们在外面等着而脾气暴躁,而且午餐是冷的。

在异步场景中,您告诉孩子清洁 table 并在他完成后告诉您。铃响了;你开门,带客人进来。孩子叫你("callback")说他打扫完了table,所以你把热饭端出来放在上面,大家都很高兴。

主要区别在于,在糟糕的方式中,同步请求会阻塞UI并且浏览器可能会一直无响应,直到请求返回。

如果您发送异步请求,浏览器将使用另一个线程,主线程可以继续执行代码,不会阻塞 UI。这种方法的挑战是 display(response) 不能 运行 在发送请求后立即。它必须 运行 在请求从服务器返回之后。这就是我们创建一个 CALLBACK 函数的原因,该函数将在响应返回时调用。

有帮助吗?