从承诺中获取数据

时间:2017-10-23 22:06:29

标签: javascript mongodb promise

我是使用easymongo和mongodb的新手。

我有以下代码将记录保存到数据库

var id;
chatRooms.save(chatData).then(function(res){
  console.log("save chat", res);
  id = res._id;
});

现在如果我将id登录到控制台我得到了未定义,但如果我使用保存功能登录它,我会得到ID。

我知道这是因为返回的是一个承诺,但我不知道如何处理它。我想要的就是能够存储新记录的ID。

感谢。

2 个答案:

答案 0 :(得分:1)

所有使用变量id的代码都必须在回调函数中执行: var id;

chatRooms.save(chatData).then(function(res){
  console.log("save chat", res);
  id = res._id;

  console.log(id);
  //Any other stuff using the variable id
});

因此,不要试图将其保存在函数之外,而是将使用它的代码放在函数中。否则它将无法工作,因为.save需要时间,并且它是异步的,否则代码将在没有它的情况下继续。

答案 1 :(得分:0)

Javascript本身不是一种顺序语言。使用promises和callback时,执行顺序会从窗口中消失。在这种情况下,如果您想使用结果ID,则必须在then函数中继续使用代码。

var doSomethingWithId = function(id) {
  doSomething()
};

chatRooms.save(chatData).then(function(res){
  console.log("save chat", res);
  doSomethingWithId(red._id);
});

不幸的是,围绕它的方法并不多。

您可以使用ES6的async / await语法来简化代码,但这会引入许多其他问题(转换等)。

要了解语言的运作方式,我建议您观看此视频:https://www.youtube.com/watch?v=8aGhZQkoFbQ