2014-12-04 78 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()不喜歡它,如果你通過它的任何參數。我在申請中遇到了一個錯誤,因爲我正在做'。(然後);'