函数完成前使用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.readFile
callback函数中调用callback()。因为应该在用结果或错误写入asyc函数后调用callback函数。
- NodeJSasynchronous队列速度太快(asynchronous队列方法减速)
- Node.JS:forEach vs for循环asynchronous性质
- 使用mongodb操作运行for-in循环
- node.async parallel:我们可以创builddynamic文本来表示任务吗?
- 量angular器:如何确认fs.watch被调用
- 节点asynchronous每个循环之间的延迟
- 是否有可能build立一个dynamic的任务列表nodejsasynchronous(瀑布,系列等…)
- 从多个asynchronousfunction(承诺)收集数据
- 如何正确构buildasynchronous节点代码