Выдвижение объекта в массив не работает - PullRequest
0 голосов
/ 17 апреля 2020

У меня следующая проблема.

let putUsernames = async (entry) => {
    let playerData = [];

    await entry.messages.forEach(async (log, index) => {
        let username;

        playerData.forEach((data) => {
            if (data.uuid == log.uuid) {
                username = data.username;
            }
        });

        if (!username) {
            let data = await PlayerSchema.schema.findOne({ uuid: log.uuid }).exec();
            if (data) {
                data = data.toObject();
                username = data.username;
            }

            console.log("uuid: " + log.uuid);
            console.log("username: " + username);

            playerData.push({
                uuid: log.uuid,
                username
            });
        }

        console.log(username);

        entry.messages[index].username = username;
    });

    return entry;
};

С помощью этой функции я пытаюсь получить имена пользователей из базы данных mon go, равной uuid из журнала ввода. Журнал записи выглядит следующим образом:

{
   "_id":"5df695a54df4b838c380643b",
   "id":"U8HJ08J",
   "date":1576441253139,
  "messages":[
      {
         "uuid":"uuid1",
         "message":"Hello!",
         "date":1576440196224
      },
      {
         "uuid":"uuid2",
         "message":"Hello there",
         "date":1576440202681
      }
   ]
}

Теперь, что я пытаюсь в данный момент, это pu sh имена пользователей в объектах сообщения:

"messages":[
      {
         "uuid":"uuid1",
         "message":"Hello!",
         "date":1576440196224,
         "username": "username1"
      },
      {
         "uuid":"uuid2",
         "message":"Hello there",
         "date":1576440202681,
         "username": "username2"
      }
   ]

На То же самое я пытаюсь вставить sh имена пользователей в playerData, чтобы мне не всегда приходилось обращаться к базе данных mon go, но похоже, что нажатие на нее не работает так, как я хочу.

console.log ("uuid:" + log.uuid); и console.log ("имя пользователя:" + имя пользователя); работает нормально, и они также выводят правильные данные, но entry.messages [index] .username = username; не работает, так что это означает, что запись совпадает с началом: (

Есть кто-нибудь, кто имеет какие-либо идеи? Заранее спасибо!

1 Ответ

0 голосов
/ 17 апреля 2020

Хорошо, только что решил проблему, я просто использовал вместо forEach

let putUsernames = async (entry) => {
    let playerData = [];

    for (let i = 0; i < entry.messages.length; i++) {
        let username;

        playerData.forEach((data) => {
            if (data.uuid == entry.messages[i].uuid) {
                username = data.username;
            }
        });

        if (!username) {
            let data = await PlayerSchema.schema.findOne({ uuid: entry.messages[i].uuid }).exec();
            if (data) {
                data = data.toObject();
                username = data.username;
            }

            playerData.push({
                uuid: entry.messages[i].uuid,
                username
            });
        }
        entry.messages[i].username = username;
    }

    return entry;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...