回调函数和异步应用程序

时间:2015-10-02 04:03:48

标签: javascript callback

我刚读过这本书" JavaScript:好的部分" 并且在回调函数部分中有一个例子
糟糕的方式:

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

推荐方式:

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


问题是,我无法理解不良方式示例所带来的差异和影响 任何人都能以简单的方式解释它吗?

2 个答案:

答案 0 :(得分:0)

同步方法会停止您的程序。异步方法让它继续下去,通知你什么时候完成。这在浏览器中尤其糟糕 - 例如 - 如果您的程序阻塞,则不会执行任何其他操作,包括响应按钮,重新绘制屏幕,​​动画旋转GIFS ......没有。

在类比中,让我们看看你的孩子在晚餐前打扫桌子。在异步场景中,您告诉孩子清理桌子,然后看他。一个铃声响起,客人们来了,但你正忙着看着你的孩子打扫桌子。当他完成后,你点头,然后去打开门,然后带出午餐。客人脾气暴躁,因为你让他们在外面等候,午餐很冷。

在异步场景中,您告诉孩子清理桌子并告诉您何时完成。铃响了;你回答门,向客人展示。孩子打电话给你(“回调”)他已经完成了餐桌清洁工作,所以你把热食带到餐桌上,每个人都很开心。

答案 1 :(得分:0)

主要区别在于,在错误的方式中,同步请求将阻止UI,浏览器可能会保持无响应,直到请求返回。

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

有帮助吗?