我的函数生成一个随机数,并检查它是否已经存在于数据库中。问题是我在注册新用户时使用了此函数,并且需要在此处添加一个Promise,以便该函数不会返回null。
有人可以告诉我我该怎么写,以便可以确定首先返回getAccountBill()
。
function getAccountBill() {
const accountBill = `2222${Math.floor(
Math.random() * 90000000000000000000,
) + 10000000000000000000}`;
Bill.findOne({
where: {
account_bill: accountBill,
},
})
.then(isAccountBill => {
if (isAccountBill) {
getAccountBill();
}
console.log('accountBill', accountBill);
return accountBill;
})
.catch(err => {
/* just ignore */
});
}
我的注册控制器:
// Register Action
exports.register = (req, res) => {
function getAvailableFunds() {
const availableFunds = 0;
return availableFunds;
}
function getAccountBill() {
const accountBill = `2222${Math.floor(
Math.random() * 90000000000000000000,
) + 10000000000000000000}`;
Bill.findOne({
where: {
account_bill: accountBill,
},
})
.then(isAccountBill => {
if (isAccountBill) {
getAccountBill();
}
console.log('accountBill', accountBill);
return accountBill;
})
.catch(err => {
/* just ignore */
});
}
function getAccountBalanceHistory() {
const accountBalanceHistory = '0,0';
return accountBalanceHistory;
}
function getTodayDate() {
const today = new Date();
return today;
}
User.findOne({
where: { login: req.body.login },
}).then(isUser => {
if (!isUser) {
bcrypt.hash(req.body.password, 10, (err, hash) => {
req.body.password = hash;
User.create({
login: req.body.login,
password: req.body.password,
name: req.body.name,
surname: req.body.surname,
email: req.body.email,
date_registration: getTodayDate(),
})
.then(user =>
Bill.create({
id_owner: user.id,
account_bill: getAccountBill(), // <- this is null
available_funds: getAvailableFunds(),
})
.then(bill => {
Additional.create({
id_owner: user.id,
account_balance_history: getAccountBalanceHistory(),
})
.then(() => {
res.status(200).json({ register: true });
})
.catch(err => {
res.status(400).json({ error: err });
});
})
.catch(err => {
res.status(400).json({ error: err });
}),
)
.catch(err => {
res.status(400).json({ error: err });
});
});
} else {
res.status(400).json({ error: 'User already exists.' });
}
});
};
答案 0 :(得分:0)
要返回承诺,您需要添加返回,因为它是正常值。 所以应该是:
...
const accountBill = `2222${Math.floor(
Math.random() * 90000000000000000000,
) + 10000000000000000000}`;
return Bill.findOne({
where: {
...