好吧,似乎我很難開始思考..恩..功能方式..或異步方式。Node.js.與非阻塞方法相混淆
我是相當新的node.js的,但我有多年的C#,JAVA,C++經驗..
圖片我有簡單的任務。這個任務的想法是每行應該在上一行完成後執行(阻塞操作)。正常的做法,讓我說,C#。此外,(這是這篇文章的原因)讓我們想象我們的代碼中有一條條件線。這個僞代碼將如下:
f = OpenFile("aaa.txt")
If f.ReadLine(1) == "bbb" // read the first line
line = f.ReadLine(2) // read the second line
else
line = ReadLine(3) // read the third line
DataBase.Insert(line) // store the line in some database, lets say in mysql
DeleteFile(f)
很簡單。現在,據我所知,node.js通過向幾乎每個函數添加回調來使用非阻塞方法。這樣,這個簡單的任務似乎成爲我的噩夢。如果我嘗試重現上面的代碼,它看起來就像這樣:
OpenFile(f, function() {
ReadLine(f, 1, function(line) {
if line == "bbb" {
ReadLine(f,2, function(line) {
DataBase.Insert(line, function() {
DeleteFile(f);
});
});
{
else {
ReadLine(f,3, function(line) {
DataBase.Insert(line, function() { // the same again
DeleteFile(f);
});
});
}
});
});
好了,你看到這一點。在這個例子中,如果我需要確保只有在文件成功打開後才能讀取該行,我需要在回調中寫入「下一行的邏輯」。我應該繼續在「上一行回調」中寫下「下一行邏輯」,如果不行,我會遇到這種情況,例如,我會嘗試讀取文件的行,但沒有打開。充分但我還要指出的是,在我的實際代碼,我真的使用非阻塞的功能,如,例如:
jsdom.env(..)
fs.exec(..)
是我在上面的正確的代碼的做法還是我想念的東西,我的做法?是完全錯誤的?我希望有一個更好的解決辦法和途徑。
謝謝您的時間。
你是正確的,它可能很難改變你的想法。代碼不容易閱讀。但是Node不能將異步任務中的線性代碼分離出來(這真是太棒了!) – TheBronx