使用池而不破坏连接会导致系统挂起

如果我将这个代码部署到Amazon Lambda …

var settings = require('./settings'); var mysql = require('mysql'); var pool = mysql.createPool({ host: settings.host, database: settings.database, user: settings.user, password: settings.password }); module.exports.handler = function (request, context, callback) { pool.getConnection(function (error, connection) { if (error) return callback(error); connection.query('select 1', null, function (error, results) { callback(null, results); }); }); }; 

…端点完成超时错误:

 { "errorMessage": "2017-07-20T10:04:26.629Z cc46e503-6d32-11e7-8fa9-9902efa96cc1 Task timed out after 6.00 seconds" } 

如果我添加connection.destroy – 这个代码成功完成:

 ... connection.query('select 1', null, function (error, results) { connection.destroy(); callback(null, results); }); ... 

但是我认为破坏联系并不是一个好的做法。 如果我使用connection.release()而不是connection.destroy() – 这没有帮助,像第一个例子一样挂起。

解决的办法是添加context.callbackWaitsForEmptyEventLoop = false; 给我的处理程序:

 module.exports.handler = function (request, context, callback) { context.callbackWaitsForEmptyEventLoop = false; ....