Самый простой способ сделать это:
existsUsername(username) {
return this.db.oneOrNone('SELECT * FROM users WHERE username = $1 LIMIT 1', username, a => !!a);
}
А затем используйте его:
db.users.existsUsername(username)
.then(exists => {
// exists - boolean
})
.catch(error => {
});
Вы не можете делать такие вещи, как if(db.users.existsUsername(username))
, это смешивает синхронный код с асинхронным. Но вы можете сделать if(await db.users.existsUsername(username))
, если вам доступен синтаксис ES7.
И если у вас есть три независимых функции, подобных этой (checkUserName
, checkEmail
, checkWhateverElse
), и вы хотите выполнить их все, вот лучший способ сделать это:
db.task(t => {
return t.batch([checkUserName(t), checkEmail(t), checkWhateverElse(t)]);
})
.then(data => {
// data = result of the batch operation;
})
.catch(error => {
// error
});
То же самое с синтаксисом ES7:
db.task(async t => {
const a = await checkUserName(t);
const b = await checkEmail(t);
const c = await checkWhateverElse(t);
return {a, b, c};
})
.then(data => {
// data = {a, b, c} object;
})
.catch(error => {
// error
});
Примечание: Ожидается, что каждая из этих функций будет выполнять запросы к t
- контексту задачи, чтобы разделить соединение.