Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 异步等待在forEach中不工作_Node.js_Asynchronous_Async Await_Koa - Fatal编程技术网

Node.js 异步等待在forEach中不工作

Node.js 异步等待在forEach中不工作,node.js,asynchronous,async-await,koa,Node.js,Asynchronous,Async Await,Koa,我有以下代码: async function goodUsers(users) { const filteredUsers = []; users.forEach(async (userInstance) => { console.log('TEST1'); const fromUserContacts = await db.userContactInvite.findAll({ where: { fromUserId: userIn

我有以下代码:

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

过滤应该是最后一个(显然)


我尝试了各种选择,但我似乎不理解这里的一些东西。你们注意到发生了什么吗?

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

异步函数goodUsers(用户){
常数filteredUsers=[];
for(用户中的用户){
log('TEST1');
const fromUserContacts=wait new Promise(resolve=>setTimeout(()=>resolve(['c1','c2']),500));
log('TEST2');
fromUserContacts.forEach(fromUserContact=>{
log('TEST3');
push('json');
});
log('TEST4');
}
console.log('FILTERED',filteredUsers);
回流过滤器;
}

好用户(['u1','u2'])
您的数据库方法是否实际返回承诺?没有,可能是重复的