如何在nodeJS

时间:2018-07-30 12:20:28

标签: javascript node.js callback

我正在处理一个nodeJS脚本,我想知道如何在另一个函数之后执行一个函数。 因为实际上我需要在数据库中保存一些数据,然后检索它们。但是目前我的检索是在保存之前执行的:/ 已经看过互联网,有很多我尝试过的例子,但目前没有人工作……如果有人可以帮助我,我可能应该做错什么:)

function persistMAP(jsonData, callback) {
  console.log(jsonData);
  //Deck persistance
  for (var i = 0; i < 1; i++) {
    (function(i) {
      var rowData = new DeckDatabase({
        _id: new mongoose.Types.ObjectId(),
        DeckNumber: Number(jsonData.Deck[i].DeckNumber),
        x: Number(jsonData.Deck[i].x),
        y: Number(jsonData.Deck[i].y),
      });
      rowData.save(function(err) {
        if (err) return console.log(err);

        for (var i = 0; j = jsonData.Units.length, i < j; i++) {
          (function(i) {
            var unit = new MapDatabase({
              //UnitID:  mongoose.ObjectId(jsonData.Units[i].UnitID),
              UnitID: jsonData.Units[i].UnitID,
              TypeID: Number(jsonData.Units[i].TypeID),
              x: Number(jsonData.Units[i].x),
              y: Number(jsonData.Units[i].y),
              _id: mongoose.Types.ObjectId(jsonData.Units[i].Code + 'dd40c86762e0fb12000003'),
              MainClass: jsonData.Units[i].MainClass,
              Orientation: jsonData.Units[i].Orientation,
              Postion: jsonData.Units[i].Postion,
              Deck: String(rowData._id)
            });

            unit.save(function(err) {
              if (err) return console.log(err);
              console.log('save');
            });
          })(i);
        }

      });

    })(i);
  }
  callback();
}; 



app.get("/Map", function(req, res) {
  console.log("got");

  var urlTempBox = 'http://localhost:3000/MapCreate';
  DeckDatabase.find(null, function(err, data) {
    if (err) {
      throw (err);
    }
    if (data.length != 0) {
      MapDatabase.find()
        .populate('Deck')
        .exec(function(err, finalData) {
        res.send(finalData);
      });
    } else {
      request(urlTempBox, data, function(error, response, body) {
        if (error) {
          throw (error);
        } else {
          var jobj = JSON.parse(response.body);
          console.log("persist begin");
          persistMAP(jobj, function() {
            console.log('retrieve Done');
          });
        }
      });
    }
  });

1 个答案:

答案 0 :(得分:0)

您可以像这样使用javascript回调:

User.findById(user_id,function(err,data){
  //Inside this you can call another function.

});

console.log("Hello"); //this statement won't wait for the above statement 

更好的方法是使用诺言。

您还可以使用异步等待功能来处理异步任务。

异步等待样式

   async function getData(){
    let user_data=await User.findById(user_id);
    let user_videos=await Videos.findById(user_data._id);  //user_data._id is coming from the above statement
    }

但是您只能在异步方法中使用await。 希望对您有所帮助。