如何通过异步函数响应执行 If await
How to do an If await by the async function response
我正在尝试创建一个函数来检查 table 是否已存在于数据库中,如果不存在,则创建一个
但问题是 If 不等待 checkTableExist()
const checkTableExist = async () => {
console.log('starting check')
db.query(`SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'users'`, async (error, results) => {
if (error) {
console.log(error)
}
if (results !== null) {
console.log('Not exist')
return true
}
console.log('Exist')
return false
})
}
const createTable = async () => {
await db.connect();
if (await checkTableExist() !== true) {
console.log('Creating Table')
await db.query(`CREATE TABLE users (
id SERIAL PRIMARY KEY,
name varchar(100),
email varchar(100),
celular varchar(11),
password varchar(255),
validated boolean
)`)
db.end()
return
}
db.end()
console.log('Table already exist')
return
}
createTable()
控制台日志
starting check
Creating Table
Not exist
在 checkTableExist
中,您正在使用回调函数检查数据库查询结果。在那里,当您 return
时,您实际上并没有返回到 createTable
函数,而是返回到 checkTableExist
。
如果您使用 await
,您的 return
应该可以正常工作:
const checkTableExist = async () => {
console.log('starting check')
const results = await db.query(`SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'users'`);
if (results !== null) {
console.log('Not exist')
return true
}
console.log('Exist')
return false
})
我正在尝试创建一个函数来检查 table 是否已存在于数据库中,如果不存在,则创建一个 但问题是 If 不等待 checkTableExist()
const checkTableExist = async () => {
console.log('starting check')
db.query(`SELECT column_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'users'`, async (error, results) => {
if (error) {
console.log(error)
}
if (results !== null) {
console.log('Not exist')
return true
}
console.log('Exist')
return false
})
}
const createTable = async () => {
await db.connect();
if (await checkTableExist() !== true) {
console.log('Creating Table')
await db.query(`CREATE TABLE users (
id SERIAL PRIMARY KEY,
name varchar(100),
email varchar(100),
celular varchar(11),
password varchar(255),
validated boolean
)`)
db.end()
return
}
db.end()
console.log('Table already exist')
return
}
createTable()
控制台日志
starting check
Creating Table
Not exist
在 checkTableExist
中,您正在使用回调函数检查数据库查询结果。在那里,当您 return
时,您实际上并没有返回到 createTable
函数,而是返回到 checkTableExist
。
如果您使用 await
,您的 return
应该可以正常工作:
const checkTableExist = async () => {
console.log('starting check')
const results = await db.query(`SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'users'`);
if (results !== null) {
console.log('Not exist')
return true
}
console.log('Exist')
return false
})