2011-05-01 127 views
0

只是在使用nodeJS構建函數時遇到了一些問題。它似乎沒有返回值,我有一種感覺,這是由於函數調用的異步性質。任何幫助將非常感激!nodeJS等待函數在繼續之前返回

sendFilesToDB發送一個數組(來自fs.readdir)的待處理文件。這些文件的內容用於構建SQL查詢。一旦插入成功,文件將被刪除。但fileToQuery函數根本不返回字符串(給出'參數必須是字符串'錯誤)。

回答

4

fileToQuery正在恢復無效,因爲它說:

function fileToQuery(filePath) { 
    do_something(...); 
} 

返回聲明你有沒有從filesToQuery而是從你定義它的匿名函數返回

你需要重寫你的fileToQuery函數需要一個額外的參數(或許resultCallback),而不是返回你的SQL字符串,你這樣做:

return resultCallback("INSERT IGNORE ...."); 

然後您就稱呼它:

fileToQuery(file,function(query){ 
    client.query(query, function(err, results) { 
    fs.unlink(file, function(err) { 
     sendFilesToDB(files); 
    }); 
    }); 
}); 

順便說一句:這就是所謂的「延續傳遞風格」,並且可以支持匿名函數的任何語言來完成。你要求的是叫做的可調用延續,但是沒有很多語言有它們。如果你有興趣瞭解他們,你應該嘗試提取計劃。

+0

啊,我想避免這種情況,但我想這就是它完成的方式。我來自一個函數執行的PHP背景,並在繼續之前返回。這似乎是不自然的如何嵌套像上面那樣。謝謝! – crawf 2011-05-01 12:34:53

+0

函數_did_返回。它只是沒有返回*你認爲它做了什麼,*當*。事實上,PHP支持continuation(因此也延續了傳遞風格),所以你可以用PHP編寫這種方式。 – geocar 2011-05-01 12:47:23

+0

啊,這是有道理的。感謝您的回答!儘管我的代碼現在需要進一步調整,因爲它不再持續監視... – crawf 2011-05-01 12:59:18