我显然错过了关于 Node.js 和 Actionhero 如何工作的一些非常重要的东西。
有人可以向我解释为什么会出现以下问题:
我有这个简单的代码:基本上它读取一个 .css 文件。
buildAdsHTML: function (ads, type) {
var cssDir = path.normalize(__dirname + '/../public/css/');
switch (type) {
case 'text':
var result = '';
console.log("STEP 1");
fs.readFile(cssDir + type + 'Ads.css', {encoding: 'utf8'}, function (err, data) {
console.log(err);
console.log(data);
if (!err) {
console.log("STEP 2");
result += '<style>' + data + '</style>';
} else {
}
});
break;
}
console.log('STEP 3');
return result;
}
现在,当运行此代码时,我得到一个空字符串作为结果。控制台输出如下:
STEP 1 <- so far so good
STEP 3<- this should be last!
null <- this is the error variable
.some-random-css-class{
display: block;
width: 100;
min-height: 250px;
}
STEP 2
现在在某个时候我发现那fs.reafFile
是异步功能。所以我自然将其更改为同步版本fs.readFileSync
。现在控制台输出更糟:
STEP 1
STEP 3
而已!没有其他的。结果我仍然得到一个空字符串。就像整个代码甚至没有通过swich
.
我在我的 actionhero 项目的所有函数和方法中都注意到了这种行为,尤其是在调用next(connection)
. 您不能只在方法结束时调用它。
对于每个if
人或swich
我必须在内部调用它才能对结果进行任何实际控制。
否则我添加到连接中的每个新数据都会丢失。
那是怎么回事?请详细解释该功能,以便我在编码时不会犯任何愚蠢的错误。