2012-12-20 59 views
0

我的node.js應用程序需要幾個文件。據我所知,它的建議異步讀取文件,所以,顯然我必須做這樣的事情:異步並行讀取文件

fs.readFile("file1", function(...) { 
    fs.readFile("file2", function(...) { 
    fs.readFile("file3", function(...) { 
     [my application] 
    } 
    } 
} 

然而,在這種情況下,該文件將被順序讀取。

有沒有一種方法可以並行讀取多個文件,並且仍然確保應用程序在所有文件都被加載後啓動?

+0

您是否反對像[async.js](https://github.com/caolan/async/)這樣的流控制庫?它們確實可以幫助像這樣提高代碼的可讀性。 –

回答

3

很容易。

var files = [...], remaining = files.length; 
var callback = function() { 
    remaining--; 
    if (!remaining) { 
     go(); 
    } 
}; 
files.forEach(function(file) { 
    fs.readFile(file, callback); 
}); 
+0

將應用程序('go')放入回調中看起來不自然。有沒有辦法確保應用程序只在文件加載後才運行,但是沒有將應用程序放在回調中?像「等待(剩餘== 0)」? –

+1

如果你想這樣做,你需要確保'wait'函數可以解析'remaining'引用。例如:'function wait(propName,compare){var int = setInterval(function(){if(global [propName] == compare){clearInterval(int); go();}},10);}'。然後調用它:'wait('remaining',0)' – user123444555621