首页 > 技术文章 > 菜鸟学习nodejs--回调函数

zhengyuan1314 2017-06-26 22:59 原文

什么是回调函数

如果大家使用过jQuery,那么会掉函数就像家常便饭一样,例如我们经常会给一个事件传一个function的参数,其实这就是回调函数,回调函数就是我们所说的异步,如果还是有点蒙,那么我们来举个例子。 
我们新建一个index1.html和一个index2.html文件 
在index1.html

$(function(){
    $('p').hide('slow',functin(){
        alter("他隐藏了");
    });
});

 

 

 

在index2.html

function(){
    $('p').hide('slow');
    alert('他隐藏了');
}

 

 

 

两个函数,第一个出现的页面的字体是弹出弹框和隐藏p标签的文件几乎是同事,甚至是先有弹框,信息慢慢消失,而第二个函数,p中的信息慢慢的消失,然后出现弹框。

Node.js中的回调函数

新建一个callback.js文件 
添加如下代码:

function haveBreakfast(food, drink, callback) {
  console.log('早餐' + food + ', ' + drink);
  if (callback && typeof(callback) === "function") {
    callback();
  }
}

haveBreakfast('toast', 'coffee', function() {
  console.log('早餐吃完了,工作了啦!');
});

 

 

 

 

输出结果如下: 
这里写图片描述

什么时候使用回调

什么时候使用呢,我们来看一个例子,然后再说明吧。 
新建一个file1.txt,写上文本aaaa,新建一个file2.txt,写上文本bbb,然后新建要给callback2.js文件 
这里写图片描述 
在callback2中加入如下代码:

var fs = require('fs'),
    http = require('http');

  http.get({ host: 'baidu.com' }, function(res) {
      console.log(" 从baidu.com获取相应");
  }).on('error', function(e) {
      console.log("访问页面出现错误");
  });

  fs.readFile('file1.txt', 'utf8', function (err, data) {
      if (err) throw err;
      console.log('File 被读取' + data);
  });

  http.get({ host: 'www.sina.com.cn' }, function(res) {
      console.log("从sina.com.cn获取相应");

  }).on('error', function(e) {
      console.log("从sina.com.cn获取相应失败");

  });

  fs.readFile('file2.txt', 'utf8', function (err, data) {
      if (err) throw err;
      console.log('File2被读取,内容是' + data);
  });

 

 

 

 

 

两次效果如下: 
这里写图片描述 
从上边的结果我们可以看出来,其实谁先访问,谁后访问都是没有固定顺序的,对于网络的访问,我们需要根据网宽等很多情况,对于文件的读取,如果文件太大,他们他一定是后读出来的,而这个情况正式我们要解释的什么时候用,对于顺序性没有严格要求,而只是需要结果,那么OK,回调是你最好的选择。

同步和异步

Node.js希望我们再单一进程中使用异步编程,当然这个不是node.js或者JavaScript独有的,而是一种风格,例如c#中的Tread,Task,Java中的Thread,Runable等都是异步编程,重要的事情说三遍,这是一个种风格,这是一个种风格,这是一个种风格。如果我们使用同步,程序的运行可能就会照成阻塞,这样不利于我们CPU的利用。

小结

我们介绍了js中的回调函数,我们也介绍了Node.js中怎么用回调函数,还介绍了同步和异步的区别,当然我们是建议用异步的。这样资源的利用率会大大提高。

 
 

推荐阅读