Обещания в node.js - PullRequest
       10

Обещания в node.js

0 голосов
/ 05 июля 2018

Стремление получить URL-адреса изображений для пользователей, найденных в истории сообщений. Очевидно, после того, как я перебираю data.directMessages.map значения URL-адреса изображения объекта, оно никогда не достигает res.render('index', {data}) Я убежден, что мне нужно data.directMessages.map, чтобы сначала выполнить все операции и ТОЛЬКО затем вернуть результат. Не могли бы вы помочь мне выяснить как?

Это мой псевдокод:

app.get('/', (req, res) => {
   Promise.all(arrayOfPromises).
   then(data => {
       return {
           ...
           ...
           directMessages: ...
       }
   }).
   // HELP NEEDED HERE !!!
   then(data => {
       data.directMessages.map(info => {
           const getData = await getProfileDataById(info);
            info.profile_img_url = await getData.profile_img_url;
           });
           return data;
       // HELP END !!!
       }).then(data => {
           res.render('index', {data});
       })
    })

Я думаю об этом

const results = data.DirectMessages.map(async (info)=> {
    // do stuff and return results
});
Promise.all(results).then(data => data);

Это был бы правильный способ решить это?

1 Ответ

0 голосов
/ 05 июля 2018

Вы можете использовать async/await следующим образом (при условии, что getProfileDataById(info) вернет обещание)

app.get('/', async (req, res) => {
    let data = await Promise.all(arrayOfPromises);
    data = {
        ...
        ...
        directMessages: ...
    };
    // Promise.all help you run parallel execution  
    const getData = await Promise.all(data.directMessages.map(info => getProfileDataById(info)));
    getData.forEach((profileData, i) => {
        data.directMessages[i].profile_img_url = profileData.profile_img_url;
    })
    res.render('index', {
        data
    });
})
...