所以我發現在對Node.js應用程序做了一些最近的更改之後,服務器在一些請求後停止響應。我想我已經找到了罪魁禍首,但想確認。Node.js異步函數沒有回調塊主線程?
因此,我有一個功能,使用後從文件系統中刪除文件,我真的不在乎從文件刪除的響應,所以我只是忽略它。
所以可以說我有這樣的功能:
removeFileAtPath(filePath, callback) {
fs.unlink(filePath, (err) => {
if (callback) {
return callback(err)
}
});
}
這會從中間件函數調用,所以通常會被稱爲是這樣的:
uploadFile(req, res, next) {
// Do something
removeFileAtPath(path, (error) => {
if (error) { /* handle error */ }
res.send(someResponse)
});
}
但因爲我不關心功能反應,我打電話removeFileAtPath
這樣的功能:
uploadFile(req, res, next) {
// Do something
removeFileAtPath(path); // No callback passed in here
res.send(someResponse);
}
Wi像這樣的東西阻止主循環或者我的問題可能在其他地方?
沒有它不會阻止迴路 –
一切接縫都可以。我認爲這個問題在別的地方。 – dumitru
你是對的,沒有回調的事情不是原因。我顯然在'// Do something'部分泄漏了數據庫連接,如果數據庫連接池耗盡,我發現它會掛起整個節點進程。更多關於我如何在這裏檢測到這個:http://stackoverflow.com/a/42319762/379226 – Inn0vative1