Как пользователю выбрать Query внутри forEach в Node.Js? - PullRequest
1 голос
/ 10 мая 2019

Этот вопрос уже задан, но это не решает мою проблему.

В моем проекте Node.Js я хочу, чтобы пользователь SELECT Query внутри forEach, но он не работает должным образом,

Я ссылаюсь на блог, который, по их словам, использует async and await Я пытался, но он также не работает должным образом.

Это мой код:

db.sequelize.query(query, { type: sequelize.QueryTypes.SELECT} ).then(async dataList=>{
    let cubbersIdList = [];
    // dataList = [{"cubbersId": 27},{"cubbersId": 28},{"cubbersId": 29}]
    await dataList.forEach((value, key)=>{
        CubbersShopsData.findAndCountAll({where:{cubbersId:value.cubbersId}}).then(datas=>{
            cubbersIdList.push(datas);
            console.log("---data---");
        }).catch(error=>{
            logger.error(error);
            res.status(200).send({status: 'error', resCode:403, msg:'Internal Server Error...!', data:error});
        });
    });
    console.log("---data---");
    res.send(cubbersIdList); // get result here
    console.log(cubbersIdList);
});

Ответы [ 2 ]

1 голос
/ 10 мая 2019

Попробуйте реорганизовать код таким образом, чтобы правильно использовать async-await.

Вызовите асинхронный код в цикле for...of, дождитесь обещания, разрешите ответ и добавьте его в свой массив позже.

db.sequelize.query(query, { type: sequelize.QueryTypes.SELECT})
.then(async dataList => {
    let cubbersIdList = [];

    for (const data of dataList) {
        const count = await CubbersShopsData.findAndCountAll({where: { cubbersId: data.cubbersId }});
        cubbersIdList.push(count);
    }

    return res.status(200).json(cubbersIdList); 
})
.catch(err => res.status(500).json({ message: 'Some error occured!' }));
1 голос
/ 10 мая 2019

попробуйте это установить npm

npm install async-foreach --save

добавить в ваш файл

var forEach = require('async-foreach').forEach;

используйте forEach вот так

db.sequelize.query(query, { type: sequelize.QueryTypes.SELECT} ).then(async dataList=>{
let cubbersIdList = [];
// dataList = [{"cubbersId": 27},{"cubbersId": 28},{"cubbersId": 29}]
forEach(dataList,function(value, key){
    var done = this.async();
    CubbersShopsData.findAndCountAll({where:{cubbersId:value.cubbersId}}).then(datas=>{
        cubbersIdList.push(datas);
        done();
    }).catch(error=>{
        done();
        logger.error(error);
        res.status(200).send({status: 'error', resCode:403, msg:'Internal Server Error...!', data:error});
    });
},function(err){
    res.send(cubbersIdList); // get result here
    console.log(cubbersIdList);
})

}); * * 1 010

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...