我是使用easymongo和mongodb的新手。
我有以下代码将记录保存到数据库
var id;
chatRooms.save(chatData).then(function(res){
console.log("save chat", res);
id = res._id;
});
现在如果我将id登录到控制台我得到了未定义,但如果我使用保存功能登录它,我会得到ID。
我知道这是因为返回的是一个承诺,但我不知道如何处理它。我想要的就是能够存储新记录的ID。
感谢。
答案 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