数组推送无法在数组forEach中运行 - Javascript

时间:2017-09-29 08:54:52

标签: javascript arrays mongodb loops foreach

我需要通过迭代mongodb结果创建一个新数组。这是我的代码。

const result = await this.collection.find({
  referenceIds: {
    $in: [referenceId]
  }
});

var profiles = [];

result.forEach(row => {
  var profile = new HorseProfileModel(row);

  profiles.push(profile);

  console.log(profiles); //1st log
});

console.log(profiles); //2nd log

我可以在第一个日志中看到profiles数组的更新。但第二个日志打印只有空数组。

为什么我无法将项目推送到数组?

更新 我认为这与承诺无关。 HorseProfileModel类只是格式化代码。

const uuid = require("uuid");

class HorseProfileModel {

    constructor(json, referenceId) {

        this.id = json.id || uuid.v4();
        this.referenceIds = json.referenceIds || [referenceId];
        this.name = json.name;
        this.nickName = json.nickName;
        this.gender = json.gender;
        this.yearOfBirth = json.yearOfBirth;
        this.relations = json.relations;
        this.location = json.location;
        this.profilePicture = json.profilePicture;
        this.horseCategory = json.horseCategory;
        this.followers = json.followers || [];
    }

}

module.exports = HorseProfileModel;

1 个答案:

答案 0 :(得分:2)

 await this.collection.find(...)

返回找到的数据数组吗?不,那很容易。找到 immeadiately 返回 Cursor 。将 forEach 调用到其上并不会调用同步Array.forEach,而是调用Cursor.forEach这是异步并且我们遇到了竞争问题。解决方案是将光标推广到其结果:

const result = await this.collection.find(...).toArray();

Reference