首页 > 解决方案 > 异步等待'承诺{} 与 Array.prototype.map

问题描述

我知道有很多关于同一个错误的问题讨论,我看到了大多数问题,但它们并没有解决我的问题。我写了这段代码:

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

我发现了一个类似的问题:Promise { } - Trying to await for .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;
  }

我该如何解决这个问题?

标签: javascriptnode.jsasynchronousasync-await

解决方案


代替

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

利用

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

或者

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


推荐阅读