Async-await 'Promise {<pending>} с Array.prototype.map - PullRequest
0 голосов
/ 13 ноября 2018

Я знаю, что многие вопросы обсуждают одну и ту же ошибку, и я видел большинство из них, и они не решили мою проблему. Я написал этот код:

const userOrganizationGroups = (organizationGroupsList) => {
 if (Array.isArray(organizationGroupsList) && organizationGroupsList.length) {
    const result = organizationGroupsList.map(async (element) => {
      const { organizationId, groupId } = element;
      const { Organizations, Groups } = models;


      const organization = await Organizations.findOne(
        { _id: organizationId },
        { name: 1, _id: 0 },
      );
      const group = await Groups.findOne({ _id: groupId });
      return Object.assign({}, {
        organizationName: organization.name,
        group: group.name,
      });
    });
    return result;
  }

};

когда я отлаживаю код:

console.log('userOrganizationGroups : ',userOrganizationGroups(list))

Я получил такой результат:

userOrganizationGroups: Promise { <pending> }

Я нашел похожий вопрос: Обещание {} - пытался дождаться .map , и я использовал решение, упомянутое в вопросе:

const userOrganizationGroups = async (organizationGroupsList) => {


 if (Array.isArray(organizationGroupsList) && organizationGroupsList.length) {
    const result = await Promise.all(organizationGroupsList.map(async (element) => {
      const { organizationId, groupId } = element;
      const { Organizations, Groups } = models;


      const organization = await Organizations.findOne(
        { _id: organizationId },
        { name: 1, _id: 0 },
      );
      const group = await Groups.findOne({ _id: groupId });
      return Object.assign({}, {
        organizationName: organization.name,
        group: group.name,
      });
    }));
    return result;
  }

Как я могу исправить эту проблему?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

console.log() был вызван первым, потому что вы не ждали, используя await или then.

Поэтому вы должны написать ниже вместо
console.log('userOrganizationGroups : ',userOrganizationGroups(list))

;(async () => {
    const resultGroups = await userOrganizationGroups(list)
    resultGroups.forEach(group => {
      console.log(`group: ${JSON.stringfy(group, null, '  ')}`)
    })
})()
0 голосов
/ 13 ноября 2018

вместо

console.log('userOrganizationGroups : ',userOrganizationGroups(list))

используйте

userOrganizationGroups(list).then( groups => console.log('userOrganizationGroups : ', groups)

или

(async () => { const groups = await userOrganizationGroups(list); console.log('userOrganizationGroups : ', groups); })();

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