javascript - 在 Promise() 中使用 while 循环

标签 javascript express promise sequelize.js

我有一个用户列表,我正在检查所有用户的某些详细信息。我正在使用 sequelize js 和 express。我想知道我们可以像这样使用 while 循环来搜索和保存数据库中的数据。请帮助我。提前致谢。

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);
        })
});

最佳答案

避免 Promise constructor antipattern , 避免 return await ,并且不要将 .then 回调与 async/await 语法混合。你可以简化很多:

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);
    });
});

关于javascript - 在 Promise() 中使用 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52232632/

相关文章:

javascript - Node.js - 如何在不超过速率限制的情况下在 for 循环中调用 Facebook API?

Javascript promise "then"始终运行,即使 promise 未能执行

javascript - 如何从ajax获取php对象

javascript - 创建带有标题的 sectionList 来比较今天的日期和数组中的日期?

node.js - Jade 服务器端传递的变量在浏览器中为空

CSS 样式未应用于 View

node.js - 将 StreamlineJS 与 NodeJS Express 框架结合使用

javascript - 使用 JQuery 调整 Div 的大小以匹配窗口尺寸

javascript - 使用 javascript/jQuery 在每第五行之后 append 表格行

javascript - Angular 返回 promise