Итак, я заметил, что после внесения некоторых изменений в мое приложение Node.js сервер перестает отвечать на запросы после некоторых запросов. Я думаю, что я прибил преступника, но хочу подтвердить.Node.js async функция без обратного вызова блокирует основной поток?
Таким образом, у меня есть функция, которая удаляет файл из файловой системы после использования, я действительно не забочусь об ответе от удаления файла, поэтому я просто игнорирую его.
Так позволяет сказать, что у меня есть эта функция:
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 ll что-то вроде этого блока основного цикла или моя проблема, вероятно, где-то в другом месте?
Нет, он не будет блокировать петлю –
Все швы в порядке. Я думаю, что проблема в другом месте. – dumitru
Вы правы, ни одна проблема обратного вызова не была причиной. Я, по-видимому, просачивал соединение с базой данных в части '// Do something', которую я нашел, зависает весь процесс узла, если пул подключений базы данных исчерпан. Подробнее о том, как я обнаружил это в этом здесь: http://stackoverflow.com/a/42319762/379226 – Inn0vative1