异步与回调

异步&回调函数

A异步

Node.js与汇总不同的地方第一点就是异步IO和事件驱动。
机制是什么:

illustration:
function test(){
    for(var i=0;i<10;i++){
        console.log(new Date);
        setTimeout(function(){},2000);
    }
};

statement:
setTimeout(callback(),time );在经过time的时间之后,执行callback函数。

可以分析得到,时间信息都是在12;54;27时刻打印出来的。
由此可以推理,console.log()函数和setTimeout()函数是异步执行的。

根据Node.js异步机制,setTimeout在运行到setTimeout()的时候,注册了一个两秒后执行的回调函数,接着返回了循环。

illustration:
for(var i=0;i<10;i++){
    setTimeout(function(){console.log(new Date),2000);
}

statement:

可以分析得到,时间信息都是在13;08;24时刻打印出来的。
程序中在极短的时间内注册了10个2秒后执行的console.log(new Date);。

BNode.js异步编程的直接体现就是回调。

1回调函数:
作为另一个函数的参数传入的函数。

回调函数如何传参数:
方式1-将回调函数的参数作为与函数同级的参数传递。
代码:
function A(parameter1){alert(paramter1)};
function B(funcition1,parameter1){function1(parameter1)};
B(A,"parameter");

方式2-将回调函数的参数在调用回调的函数内部创建。
代码:
function A(parameter1){alert(paramter1)};
function B(function1){var parameter="parameter";A(parameter);};
B(A);

2异步与回调的关系:
通过回调函数的使用体现异步编程。
但是使用回调不意味程序异步。

解释:回调函数在完成任务之后就会被调用。Node使用了大量的回调函数。

illustration :
var fs=require('fs');
var data=fs.readFileSync('A.txt');
console.log(data.toString());
console.log('End.');

以上是阻塞案例,程序会先输出A文件的内容,再输出‘End’,因为在data定义时执行了同步读文件的函数readFileSync()。

var fs=require('fs');
fs.readFile('A.txt',function(err,data){
    if(err) return console.error(err);
    console.log(data.toString());
});
console.log('End.');

以上是非阻塞案例,程序会先输出‘End’,再输出A文件的内容。
statement:
fs模块用于对系统文件和目录进行读和写。
fs.readFile(filename,[encoding],[callback(err,data)]):以异步的方式读取文件内容。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值