簡體   English   中英

請求循環完成后如何獲得響應

[英]How to get response after Loop of requests finished

我嘗試在每個循環中執行多個請求並將數據響應推送到一個數組,但我總是只得到第一個項目

//Get all roles
router.get('/', async (req, res) =>{

    try {

        knex.from( roles_table )
        .then(roles => {
            let rolePermissions =[];
            roles.forEach(role => {
                knex.select(permissions_table + '.*').from(permissions_table)
                    .innerJoin(permissions_roles_table, permissions_table + '.id', permissions_roles_table +'.id_permission')
                    .where(permissions_roles_table + '.id_role', '=', role.id)
                .then(rows => {
                    role.permissions = rows;
                    rolePermissions.push(role)
                });
                
            });
            
            res.status(200).json(rolePermissions);
            

           
        });
       
    } catch (err) {
        res.status(500).json({message: err});
    }
});

想做現代JS,必須要了解Promise和asynchrone。

類似的東西可能就是你要找的

//This const will store an array of Promise
const allRows = knex.from( roles_table )
.then(roles => {
    return roles.map(role => {
        return knex.select(permissions_table + '.*').[...]
    });
});

//This method will wait for each promises to succeed or first one to failed
return Promise.all(allRows)
.then( allRows => {
    //allRows is now an array containing all the results
    res.status(200).json(rolePermissions);
})
.catch (err) {
    res.status(500).json({message: err});
});

對了,不需要try/catch一個Promise,有.catch方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM