函数完成前使用callback执行callback

我会写下面的代码来练习JavaScript中的callback函数。

fs = require('fs'); function funcWithCallback(callback) { fs.readFile('YouBikeTP.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data.length); }); callback(); } funcWithCallback(function(){ console.log("string in callback ") }) 

代码的目的是试图控制方法执行的顺序。 string“callback中的string”应打印文本文件的长度后打印,但是当我跑这个代码的结果是:

 >> "string in callback" >> 91389 //the length of YouBikeTP.txt 

这不是我预期的结果。 应该

  >> 91389 //the length of YouBikeTP.txt >> "string in callback" 

任何人都可以告诉我为什么在funcWithCallback(callback)完成之前调用callback函数? 我误解了callback函数的含义吗?

将您的代码更改为:

原因 :您在readFile中定义为callback的函数是asynchronouscallback。 它不会立即执行,而是在文件加载完成时执行。 因此,在完成asynchronouscallback的console.log后,需要调用主callback函数。

 fs = require('fs'); function funcWithCallback(callback) { fs.readFile('YouBikeTP.txt', 'utf8', function (err,data) { if (err) { return console.log(err); } console.log(data.length); callback(); //calling the main callback after the async callback console logs }); } funcWithCallback(function(){ console.log("string in callback ") }) 

你不是在readFile自己的callback中调用callback () ,你只是在调用readFile之后调用它,然后调用它的callbackfunction (err,data)

您必须在fs.readFilecallback函数中调用callback()。因为应该在用结果或错误写入asyc函数后调用callback函数。