我试图使用hapi.js从mysql获取一些数据列表。但是我遇到了这个错误
Error: method did not return a value, a promise, or throw an error
但是我可以在控制台中看到这些数据。
[RowDataPacket {id:1,代码:'test',描述:'bla',格式:'12'}, RowDataPacket {id:2,代码:“ test2”,描述:“ test”,格式:“ 15”}]
这是我的处理程序代码:
exports.getInfo = async (request, h) => {
try {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) throw err;
console.log(result);
return h.response(result);
});
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404: return Boom.notFound();
default: return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
这是承诺的问题,我想mysql没有返回任何承诺。我该如何解决这个问题?
答案 0 :(得分:1)
您已经在使用异步运算符,这意味着您可以在代码中使用异步/等待方法。
我假设您的pool.query
方法正在返回一个promise,所以您的代码可能像这样。
exports.getInfo = async (request, h) => {
try {
const result = await pool.query(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};
如果没有,则可以将pool.query
方法转换为Promise。
const QueryResult = (query) => {
return new Promise((resolve, reject) => {
pool.query(`SELECT * FROM test`, (err, result) => {
if (err) return reject(err);
return resolve(result)
});
})
}
exports.getInfo = async (request, h) => {
try {
const result = await QueryResult(`SELECT * FROM test`);
return result;
} catch (e) {
if (e.response) {
switch (e.response.status) {
case 404:
return Boom.notFound();
default:
return Boom.failedDependency();
}
} else {
return Boom.failedDependency();
}
}
};