Node.js 回调函数和异步编程概念
异步编程概念
类比通常有帮助。你在一家餐馆做饭。鸡蛋和烤面包的订单。
-
同步:你煮鸡蛋,然后你做烤面包。
-
异步,单线程:你开始煮鸡蛋并设置一个计时器。你开始吐司做饭,并设置一个计时器。虽然他们都在做饭,但你要清理厨房。当计时器响起时,你可以将鸡蛋从烤箱中取出,然后将烤面包机从烤面包机中取出并送达。
-
异步,多线程:你雇两个厨师,一个煮鸡蛋,一个煮烤面包。现在你遇到了协调厨师的问题,这样他们在共享资源时就不会在厨房里相互冲突。你必须付钱给他们。
现在,多线程只是一种异步才有意义吗? 线程是关于工人的; 异步是关于任务。在多线程工作流中,您可以将任务分配给工作人员。在异步单线程工作流程中,您有一个任务图表,其中某些任务取决于其他任务的结果; 当每个任务完成时,它会调用代码来调度可以运行的下一个任务,给定刚刚完成的任务的结果。但是你(希望)只需要一个工人来执行所有任务,而不是每个任务一个工人。
Node.js 异步编程的直接体现就是回调。
回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。
例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。
回调函数一般作为函数的最后一个参数出现:
阻塞代码实例
创建一个文件 input.txt ,内容如下:
菜鸟教程官网地址:www.runoob.com
创建 main.js 文件, 代码如下:

浙公网安备 33010602011771号