在循环中将数据保存到mongoDB中

时间:2019-06-28 11:39:25

标签: javascript mongodb asynchronous

我有一个读取XML并将其映射到JSON的函数,然后将该JSON循环保存到MongoDB中。函数正常工作的数据已保存,但是...在我有“行已保存”的行中有此控制台日志....我认为这个未定义是因为mongodb save()没有;没有要保存的newData正在等待它环。一旦它记录了行保存。如何摆脱不攻防?还可以请他们我如何结束这个保存循环吗?因为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 个答案:

答案 0 :(得分:1)

首先,您必须进行更改

arg = os.path.join('/home/svimal/Data/ABoVE/100_catchments/VIC_setup/05MG001/', 'Global_Param')
os.system('../VIC_4.1.2.k.Purdue/vicNl -g  ' + arg)

从第二秒开始消除 undefined ,然后block将解决undefined

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

我真的不明白您要如何结束保存循环,但我认为您想要某种顺序的行为,可以在此newData块之前添加 wait 关键字

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