Callbacks理解(Node)

本文探讨了Node.js中的同步与异步编程概念,并通过示例解释了如何使用回调函数来处理异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Callbacks are functions that are executed asynchronously, or at a later time.Node中几乎所有的东西都使用了回调函数,但他不是node发明的,他们是JavaScript的一部分,判断一个函数是同步还是异步的取决于他的上下文环境。

同步:像看书一样从上向下读,上一行定义函数,下一行立即执行。

var Mynum=1;
function addOne(){Mynum++;}
addOne();
console.log(Mynum);//2

异步:

var fs = require('fs'); //fs是node的核心模块,通过require加载该模块
var myNumber = undefined ;// 不知道myNumber是否存储在file中
function addOne() {
  fs.readFile('number.txt', function doneReading(err, fileContents) {
    myNumber = parseInt(fileContents);
    myNumber++;
  })
}
addOne()
console.log(myNumber) //undefined 

原因是我们在该代码中使用了异步的fs.readFile()方法,它是由node提供的异步方法,需要很长时间去完成,所以没有等到readFile()获取到文件的内容时就已执行console.log打印mynumber的值。

当addOne()函数调用时,他开始fs.readFile()方法,然后继续执行后续的代码,如果没有代码要执行,node将会等待处理的fs / network操作完成,否则将停止运行并退出到命令行。

若要取得预期的运行结果,就需要使用回调函数

当我们运行程序时,所有的函数都是立刻定义的,但却不是立即执行的。这是理解异步编程的基础。理解回调函数的关键是当你不知道异步操作什么时候完成,但你知道一步操作在哪完成时(异步函数的最后一行)使用回调函数。

声明回调函数时代码的从上到下顺序并不重要,重要的是他的逻辑/层次化嵌套。首先将代码分解成函数,其次如果一个函数依赖于另一个函数的完成就将其声明为回调函数。

var fs = require('fs');
var myNumber = undefined;

function addOne(callback) {
  fs.readFile('number.txt', function doneReading(err, fileContents) {
    myNumber = parseInt(fileContents);
    myNumber++;
    callback();
  })
}

function logMyNumber() {
  console.log(myNumber)
}

addOne(logMyNumber);//2

logMyNumber()函数可以作为参数传入并将成为addOne()函数里的callback()变量;在readFile完成后,callback()被调用,打印出myNumber的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值