[英]Node.js + Actionhero code not running consecutively
我显然缺少关于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
我必须在内部调用它以对结果进行任何实际控制。
否则,我添加到连接中的所有新数据都会丢失。
那是什么 请详细说明该功能,以便在编码时我不会犯任何愚蠢的错误。
菲纳丽想通了。
问题是我没有注意到fs.readFileSync
没有回调功能。
因此,应正确使用该功能
var result= fs.readFileSync(pathToFile,{options})
return result;
对于next(connection);
提到的问题,我仍然可以使用一些帮助next(connection);
。 我真的不知道为什么它会跳过整个代码部分。
我发现如果您将参数传递给它,next()会不喜欢它。 我的应用程序中存在一个错误,长达一两天,因为我在做“ .then(next);”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.