我会写下面的代码来练习函数与JavaScript中的回调。功能与回调执行回调函数完成前
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 in callback"
>> 91389 //the length of YouBikeTP.txt
这不是我期待的结果。 应该
>> 91389 //the length of YouBikeTP.txt
>> "string in callback"
任何人都可以告诉我为什么会回调函数被调用之前funcWithCallback(回调)完成?我误解了回调函数的含义吗?
谢谢你的回复,我还有一个问题使用上面的同样的代码。 如果我在前一行callback()(您命令的那一行)的readFile回调中添加了一个IO绑定任务(例如,将数据保存到另一个文件或耗时的循环操作),callback()将执行直到I/O限制任务完成? –
yes @张轩铭无论你想要做什么,如果它是同步的,它将正常工作,即回调将在该任务之后按照我的回答执行。但是如果你正在做的任务是异步的,那么你将不得不将主回调放在回调中,以完成你正在努力完成的大任务。你也可以使用promises https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise –