typescript 异步等待不等待

7qhs6swi  于 2022-12-24  发布在  TypeScript
关注(0)|答案(2)|浏览(250)

我尝试遍历一个数组,并为每个id更新模型,然后将结果推入另一个数组
这是我的代码:

async function getSortedAnimals() {
  var i = 0;
  var sortedAnimals = [];
  ids.forEch(async (id) => {
    i++;
    const animal = await this.animalModel.findOneAndUpdate(
      { _id: id },
      {
        $set: {
          order: i,
        },
      },
    );
    sortedAnimals.push(animal);
  });
  console.log(sortedAnimals);
  return sortedAnimals;
} //function

当我的控制台日志,数组是空的,我不知道为什么!这就像它不等待循环结束。
有什么建议吗?

ovfsdjhp

ovfsdjhp1#

forEach构造中忽略了结果承诺。您可以将其替换为for...of,如下所示:

async function getSortedAnimals() {
    const ids = [1,2,3];
    const sortedAnimals = [];
    for (const id of ids) {
        const animal = await findOneAndUpdate(
            {_id: id}
        );
        sortedAnimals.push(animal);
    }
    console.log(sortedAnimals);
}

async function findOneAndUpdate(o) {
    return o._id + 1;
}

getSortedAnimals();
rggaifut

rggaifut2#

因为在将对象推送到数组之前要记录数组
迭代是异步的,但不是全局循环,但是您可以使用for await

var sortedAnimals = [];
var i = 0;
for await (const id of ids) {            
i++;
const animal = await this.animalModel.findOneAndUpdate(
{ _id: id },
{
$set: {
order: i,
},
);

i++;
}
console.log(sortedAnimals)

相关问题