代码之家  ›  专栏  ›  技术社区  ›  holler

node.js中的承诺

  •  2
  • holler  · 技术社区  · 6 年前

    旨在为在消息历史记录中找到的用户获取图像URL。 显然,在我循环通过之后 data.directMessages.map 对象图像的URL值永远不会使其成为 res.render('index', {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 回复  |  直到 6 年前
        1
  •  1
  •   Arif Khan codemt    6 年前

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