【问题标题】:Async await not working in forEach异步等待在 forEach 中不起作用
【发布时间】:2018-01-27 06:22:51
【问题描述】:

我有以下代码:

async function goodUsers(users) {
  const filteredUsers = [];

  users.forEach(async (userInstance) => {
    console.log('TEST1');

    const fromUserContacts = await db.userContactInvite.findAll({
      where: {
        fromUserId: userInstance.id,
      },
    });
    console.log('TEST2');
    await fromUserContacts.forEach((fromUserContact) => {
      console.log('TEST3');
      const userJson = fromUserContact.toJSON();
      userJson.contactState = 'INVITATION_SENT';
      filteredUsers.push(userJson);
    });

    console.log('TEST4');
  });

  console.log('FILTERED', filteredUsers);
  return filteredUsers;
}

当我调用 goodUsers 时,我得到以下输出: 测试1 过滤 测试2 测试3 测试4

FILTERED 应该是最后一个(显然)。

我尝试了各种选项,但我似乎不理解这里的某些内容。你们注意到发生了什么吗?

【问题讨论】:

标签: node.js asynchronous async-await koa


【解决方案1】:

这是一个正确的行为,async/await 只影响使用它们的功能。因此,您需要将调用每个元素的回调的forEach 替换为for 运算符:

async function goodUsers(users) {
  const filteredUsers = [];

  for(user in users) {
    console.log('TEST1');
    const fromUserContacts = await new Promise(resolve => setTimeout(() => resolve(['c1', 'c2']), 500));

    console.log('TEST2');
    fromUserContacts.forEach(fromUserContact => {
      console.log('TEST3');
      filteredUsers.push('json');
    });

    console.log('TEST4');
  }

  console.log('FILTERED', filteredUsers);
  return filteredUsers;
}

goodUsers(['u1', 'u2']);

【讨论】:

    猜你喜欢
    • 2016-12-05
    • 2019-06-29
    • 2023-04-07
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多