Сохранение данных в mongoDB в цикле undefiend - PullRequest
1 голос
/ 28 июня 2019

У меня есть функция, которая читает XML и отображает его в JSON, затем этот JSON сохраняется в цикле в MongoDB. Функции работают хорошо, данные сохраняются, но ... в строке, где у меня есть 'Row Saved', у меня есть этот консольный журнал .... Я думаю, что это неопределено, потому что mongodb save () не имеет newData для сохранения, ждет его от петля. как только это будет записано в Row Saved. Как избавиться от незнакомца? Также вы можете порадовать их меня, как закончить этот цикл сохранения? потому что когда он "останавливается" через 20-30 секунд, я снова начинаю сохранять ... поэтому мой код не закончился.

undefiend
undefiend
Row Saved
Row Saved
Row Saved
undefiend
undefiend

Код:

 function FileToFetch(dir) {
    fs.readdir(dir, async function(err, files) {
      const results = [];
      const files_path = files
        .map(function(fileName) {
          return {
            name: fileName,
            time: fs.statSync(dir + "/" + fileName).mtime.getTime()
          };
        })
        .sort(function(a, b) {
          return a.time - b.time;
        })
        .map(function(v) {
          return dir + "/" + v.name;
        });
      for (let index = 0; index < files_path.length; index++) {
        const element = files_path[index];
        results.push(element);
      }

      for (let index = 0; index < results.length; index++) {
        const element = results[index];

        let asd = await readFile(element, "utf8");
        parseString(asd, async (err, result) => {
          if (err) {
            throw err;
          } else {
            if (result.test !== undefined) {
              for (
                let index = 0;
                index < result.test.length;
                index++
              ) {
                const element = result.test[index];
                const newData = new Month({

                  name3: element.$.MetaDataVersionOID,

                });
                if (newData) {
                  newData
                    .save()
                    .then(() => console.log("Row Saved"))
                    .then(err => console.log(err));
                }
              }
            }
          }
        });
      }
    });
  }
  FileToFetch("./testing");

1 Ответ

1 голос
/ 28 июня 2019

Итак, прежде всего, вы должны изменить

        newData
                .save()
                .then(() => console.log("Row Saved"))
                .then(err => console.log(err));

чтобы избавиться от undefined со второго, после чего блок разрешится неопределенным

        newData
                .save()
                .then(() => console.log("Row Saved"))
                .catch(err => console.log(err));

Я не совсем понимаю, что вы имеете в виду, как завершить цикл сохранения, но я думаю, что вам нужно какое-то последовательное поведение, вы можете добавить ключевое слово wait перед этим блоком newData

        await newData
                .save()
                .then(() => console.log("Row Saved"))
                .catch(err => console.log(err));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...