第二章: 回调

在第一章中,我们探讨了JavaScript中关于异步编程的术语和概念。我们的焦点是理解驱动所有“事件”(异步函数调用)的单线程(一次一个)事件轮询队列。我们还探讨了各种解释 同时 运行的事件链,或“进程”(任务, 函数调用等)间的关系的并发模式。

我们在第一章的所有例子中,将函数作为独立的,不可分割的操作单位使用,在这些函数内部语句按照可预知的顺序运行(在编译器水平之上!),但是在函数顺序水平上,事件(也就是异步函数调用)可以以各种顺序发生。

在所有这些情况中,函数都是一个“回调”。因为无论什么时候事件轮询队列中的事件被处理时,这个函数都作为事件轮询“调用并返回”程序的目标。

正如你观察到的,在JS程序中,回调是到目前为止最常见的表达和管理异步的方式。确实,在JavaScript语言中回调是最基础的异步模式。

无数的JS程序,即便是最精巧最复杂的程序,都曾经除了回调外不依靠任何其他异步模式而编写(当然,和我们在第一章中探讨的并发互动模式一起)。回调函数是JavaScript的异步苦工,而且它工作得相当好。

除了……回调并不是没有缺点。许多开发者都对 Promises 提供的更好的异步模式感到兴奋不已。但是如果你不明白它在抽象什么,和为什么抽象,是不可能有效利用任何抽象机制的。

在本章中,我们将深入探讨这些话题,来说明为什么更精巧的异步模式(在本书的后续章节中探讨)是必要和被期望的。

链接