Асинхронизация в цикле foreach - PullRequest
0 голосов
/ 08 мая 2018

Мне нужно возвращать значение, когда все асинхронные методы в foreach завершены.

Как я могу это сделать?

 return backupModel.find({}).exec().then(backups => {
        backupBuild = []
        backups.forEach((backup, i) => {
            userDB.getC(backup.id).then((user) =>{
                backupBuild[i].client=user
            })
        })
        return backupBuild,
    });

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Я также пытался это сделать: но "Невозможно установить свойство 'client' из undefined"

return backupModel.find({}).exec().then(backups => {
    let backupBuild = [];
    let promises = [];
    backups.forEach((backup, i) => {
        promises.push(userDB.getCustomer(backup.idClient).then((user) =>{
            backupBuild[i]= backup;
            backupBuild[i].client= user;
        }))
    })
    Promise.all(promises).then(() => {return console.log(backupBuild)})
});
0 голосов
/ 08 мая 2018

Попробуйте с Promise.all:

return backupModel.find({}).exec().then(backups =>
    Promise.all(backups.map(backup => userDB.getC(backup.id)))
).then(backupBuild => console.log(backupBuild));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...