Javascript 在Promise()中使用while循环
我有一个用户列表,我正在检查所有用户的某些详细信息。我正在使用sequelize js和express。我想知道我们可以使用像这样的while循环在数据库中搜索和保存数据。请帮助我。提前感谢Javascript 在Promise()中使用while循环,javascript,express,promise,sequelize.js,Javascript,Express,Promise,Sequelize.js,我有一个用户列表,我正在检查所有用户的某些详细信息。我正在使用sequelize js和express。我想知道我们可以使用像这样的while循环在数据库中搜索和保存数据。请帮助我。提前感谢 let royalty_bonus = async (sponsor) => { return await new Promise((resolve, reject) => { models.RoyaltyUser.findById(sponsor)
let royalty_bonus = async (sponsor) => {
return await new Promise((resolve, reject) => {
models.RoyaltyUser.findById(sponsor)
.then(async (sponsorRow) => {
let user_level = 1;
let sponsor_id = sponsorRow;
try {
while (sponsor_id != null && user_level <= 3) {
let level_length = await getLevel(sponsor_id.id, user_level);
if (user_level === 1 && level_length.length === 3) {
console.log('Level One Achieved By ', sponsor_id.id);
} else if (user_level === 2 && level_length.length === 9) {
console.log('Level Two Is Achieved By ', sponsor_id.id);
} else {
console.log('No Level');
}
await models.RoyaltyUser.findOne({where: {id: sponsor_id.sId}})
.then((sponsor_new_row) => {
sponsor_id = sponsor_new_row;
})
.catch((e) => {
console.log(' Inner Catch Error ', e.message);
reject();
});
user_level++;
}
resolve();
}
catch (e) {
reject(e);
}
})
.catch((e) => {
reject('catch ', e.message);
});
});
};
router.get('/royalty_user', async (req, res, next) => {
royalty_bonus(4)
.then(() => {
console.log('done');
})
.catch((e) => {
console.log('Catch two', e.message);
})
});
让版税奖金=异步(赞助商)=>{
返回等待新承诺((解决、拒绝)=>{
models.RoyaltyUser.findById(赞助商)
.然后(异步(同步)=>{
让用户_级别=1;
让赞助人_id=赞助人;
试一试{
while(赞助商id!=空和用户级别(&U){
赞助商id=赞助商新行;
})
.catch((e)=>{
日志('internalcatch Error',e.message);
拒绝();
});
用户级++;
}
解决();
}
捕获(e){
拒绝(e);
}
})
.catch((e)=>{
拒绝('catch',e.message);
});
});
};
router.get('/royalty\u user',异步(req,res,next)=>{
版税奖金(4)
.然后(()=>{
console.log('done');
})
.catch((e)=>{
log('Catch two',e.message);
})
});
避免、避免和不要混合。然后使用async
/等待语法进行回调。您可以简化很多:
async function royalty_bonus(sponsor) {
const sponsorRow = await models.RoyaltyUser.findById(sponsor);
let user_level = 1;
let sponsor_id = sponsorRow;
while (sponsor_id != null && user_level <= 3) {
let level_length = await getLevel(sponsor_id.id, user_level);
if (user_level === 1 && level_length.length === 3) {
console.log('Level One Achieved By ', sponsor_id.id);
} else if (user_level === 2 && level_length.length === 9) {
console.log('Level Two Is Achieved By ', sponsor_id.id);
} else {
console.log('No Level');
}
const sponsor_new_row = await models.RoyaltyUser.findOne({where: {id: sponsor_id.sId}});
sponsor_id = sponsor_new_row;
user_level++;
}
}
router.get('/royalty_user', (req, res, next) => {
royalty_bonus(4).then(() => {
console.log('done');
}, e => {
console.log('Catch two', e.message);
});
});
异步功能版税奖金(赞助商){
const sponsause=wait models.RoyaltyUser.findById(赞助商);
让用户_级别=1;
让赞助人_id=赞助人;
while(赞助商id!=空和用户级别(&U){
版税奖金(4)。然后(()=>{
console.log('done');
},e=>{
log('Catch two',e.message);
});
});
避免!当您使用异步时,避免使用然后
等待
!到底是什么不起作用?这是按预期工作的。但我不确定这在某一点上是否会失败。我是新手。我只想知道这种承诺执行是对的还是错的。while
循环您询问d关于问题的标题是好的,其余的是糟糕的:-)你能告诉我怎样才能消除糟糕的事情吗?bcz这超出了我的范围