Node.js之基于事件驱动的回调

函数传递

function say(word) {
   console.log(word);
}

function execute(someFunction,value){
   someFucntion(value);
}

execute(say,"Hello");

进化......

function execute(someFunction,value){
   someFunction(value);
}


execute(function(word){console.log(word)},"Hello");

这次somefunction连函数名都不需要了,是为匿名函数。

为什么我们要这样?为什么我们要向创建方法传递一个函数,而在这个方法执行时函数便会调用?

var http  = require("http");;

http.createServer(function(request,response) {
  response.writeHead(200,{"Content-Type":"text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

这是Node.js服务器的一个例子,对照之前的函数,我们可以知道我们创建了一个服务器函数并侦听8888端口,而一旦有新的请求到达时,便会调用里面的function,在客户端输出“Hello World”。

打个比方,我们坐在屋子里面的沙发,沙发距离门有一段距离。当我们听到有人敲门(请求到达)时,我们从沙发站起,走到门前开门(执行响应操作)。而现在是女朋友要来你家了(你内心慌得一匹得甚至有点想撸代码),你便跑到门前候着(侦听,等待HTTP请求),女朋友一来立刻开门。

这就是基于事件驱动的回调。

那你又一想,要是我们既没等到HTTP请求,我们的函数也没有调用捏?(我们岂不是干候着?还能干啥?)

可以干。我们之后的代码还是有效。

var http  = require("http");;

http.createServer(function(request,response) {
  console.log("Request received.");
  response.writeHead(200,{"Content-Type":"text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

console.log("Server has started.");

客户端localhost:8888在未访问时服务端先输出Server has started.

当客户端发出HTTP请求时服务端再输出Request received,而客户端照常输出"Hello World"。

等等,为什么是两句输出Request received?

这是因为在我们访问时,服务器会尝试读取localhost:8888/favicon.ico

以上便是事件驱动的异步服务端和回调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值