【发布时间】:2022-01-10 03:43:45
【问题描述】:
我有下面的代码。我需要在其他函数中使用 con 的值,但对此我没有可能的解决方案。我尝试使用 .thens 并像其他堆栈文章一样等待,但我不断收到 con 无效的错误。
我真的被困住了,不确定如何处理。
service.js
async function connectToDatabase(secret) {
try {
const secretValue = await getSecretPromise(secret)
const { host, port, username, password, dbname } = JSON.parse(secretValue);
let con = mysql.createConnection({
host: host,
port: port,
user: username,
password: password,
database: dbname
});
con.connect(function(err) {
if (err) throw err;
console.log("Connected to database!");
});
return con;
} catch (error) {
console.error(error)
}
}
// Start an IIFE to use `await` at the top level
(async function(){
let con = await connectToDatabase(secretName);
})();
function createUser({ data }) {
return new Promise((resolve, reject) => {
var sql = `query`;
con.query(sql, function (err, result) {
//does not work currently because ReferenceError: con is not defined
});
});
}
controller.js
async function getUsers(req, res, next) {
service.getUsers().then(function(val) {
res.json(val)
});
}
getsecretpromise
function getSecretPromise(secretName) {
return new Promise((resolve, reject) => {
client.getSecretValue({SecretId: secretName}, function(err, data)
{
//do stuff
}
}
service.getUsers
//this is in service.js
module.exports = {
createUser,
getUsers,
patchUser,
loginUser,
updateCallForward,
getEmail,
getCallForwardingNumber,
getDB
};
function getUsers() {
return new Promise((resolve, reject) => {
var sql = `sql`;
getDB().then(con => {
con.query(sql, function (err, result) {
if (err) throw err;
resolve(result);
});
});
});
}
【问题讨论】:
-
为什么
secretName是一个承诺? -
@LucaKiebel wdym
-
const secretValue = await getSecretPromise(secret)为什么这是一个承诺?似乎这是你必须在这里使用承诺的唯一原因 -
因为我从 API 获取值,所以我需要 @LucaKiebel
-
@LucaKiebel 更新了更多信息
标签: javascript node.js asynchronous async-await promise