2015-10-21 83 views
0

好吧那我現在有是我的錯誤處理程序被調用之前一個功能齊全的問題,目前我使用:與快遞中間件的優先問題

function loadRoutes(route_path) { 
    fs.readdir(route_path, function(err, files) { 
     files.forEach(function (file) { 
      var filepath = route_path + '/' + file; 
      fs.stat(filepath, function (err, stat) { 
       if (stat.isDirectory()) { 
        loadRoutes(filepath); 
       } else { 
        console.info('Loading route: ' + file); 
        require(filepath)(app); 
       } 
      }); 
     }); 
    }); 
} 

setTimeout(function() { 
    require('./errorhandle'); 
}, 10); 

超時解決方案的工作,但它不是一個適當。如果路線加載時間超過10毫秒,則會再次中斷。 (404阻擋在它之前加載所有頁面)

回答

0

移動回調函數內部的函數調用的地方:

fs.readdir(route_path, function(err, files) { 
    ... 
    // Move the function call to somewhere inside this callback, 
    ... 
    fs.stat(filepath, function (err, stat) { 
    ... 
    // Or inside this callback, 
    ... 
    }); 
    ... 
    // Or even later inside the first callback. 
    ... 
}) 

我不能告訴什麼時候你試圖調用功能,但它應該在回調函數中的某個地方調用。您需要確定何時需要調用它。這將在適當的時候執行該函數,而不像setTimeout(),這不意味着以這種方式使用。

另外,您應該在應用程序的開始部分需要所有中間件,因爲對require的調用是同步和阻塞的。

+0

沒有直接回答我的問題,但確實幫助我解決了回調函數的問題。 – Community