javascript - 试图理解异步/等待
问题描述
我有一个异步函数“查询”,它“等待”pool.query 返回结果。
// db.js
const pool = new pg.Pool({
connectionString: isProduction ? process.env.DATABASE_URL : connectionString,
ssl: isProduction,
});
export const query = async ({ text, values }) => {
const start = Date.now();
try {
const results = await pool.query(text, values);
const duration = Date.now() - start;
logger.info(`executed query: ${text} duration: ${duration} rows: ${results.rowCount}`);
return results.rows;
} catch (e) {
logger.error(`error: ${e}`);
}
};
在另一个异步函数 getUser() 中,我正在“等待”查询函数在返回数据之前完成。
// users.js
export const getUser = async (email) => {
const text = `
SELECT (user_id, email) FROM users
WHERE email = $1
`;
const values = [email];
try {
const data = await query({ text, values });
// ^ vscode says above await is doing nothing
return data.rows[0];
} catch (e) {
logger.error(`error: ${e}`);
}
};
然后在另一个异步函数中,我正在等待 getUser 函数
// auth.js
export const SignIn = async (email, password) => {
const userRecord = await getUser(email);
if (!userRecord) {
throw new Error('User not registered');
}
logger.silly('Checking password');
const validPassword = await argon2.verify(userRecord.password, password);
if (validPassword) {
logger.silly('Password is valid!');
logger.silly('Generating JWT');
const token = await generateToken(userRecord);
const user = { id: userRecord.id, email: userRecord.email };
return { user, token };
} else {
throw new Error('Invalid Password');
}
};
在 vsCode 中,我收到一条警告“等待对此表达式的类型没有影响”。仅在“等待”查询函数调用时,而不是在“等待”getUser 函数调用时。我在这里想念什么?
解决方案
返回什么query
?如果results.rows
是一个承诺,那么这可能会解释你所看到的。
推荐阅读
- file-io - keyPressed 是否被正确激活?
- java - 从有符号2的补码,java将十六进制转换为十进制
- javascript - ajax 调用后 Youtube-Api 按钮不会显示
- internet-explorer - 使用 IEFrame.dll 时如何登录到控制台
- github - 如何在 VSTS 自动构建中对私有 Github 子模块进行身份验证?
- php - php桌面软件如何隐藏程序文件目录
- mysql - MySQL 在 int(11) 自动增量列上跳过 2147483646
- javascript - 如何用 canvas.toDataURL 的结果替换文件输入的内容?
- python - Selenium 中的相对选择器?
- java - Java通过递归查找文件而不是在其他子目录中查找