2014-12-04 79 views
0

我明显错过了一些关于Node.js和Actionhero如何工作的非常重要的东西。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)时最显着。你不能在方法结束时调用它。

对于每个ifswich 我必须在里面调用它来对结果进行实际控制。

否则,我添加到连接的每个新数据都将丢失。

那是什么?请详细解释该功能,以便在编码时不发生任何dumn错误。

谢谢。

+0

此代码在actionhero中使用在哪里?这是一个行动吗? – Evan 2014-12-04 18:37:47

回答

0

Finaly想通了。

问题是我没有注意到fs.readFileSync没有回调功能。

所以该功能的正确使用应该已经

var result= fs.readFileSync(pathToFile,{options}) 
return result; 

我仍然可以使用我next(connection); mentiond问题有所帮助。我真的不知道为什么它跳过这样的代码的整个部分。

0

我发现next()不喜欢它,如果你通过它的任何参数。我在申请中遇到了一个错误,因为我正在做'。(然后);'