我想使用mongoDB insertOne
返回的ID来在另一个函数中使用它。
const saveProjectonDB = async function(Projet) {
var projectadded
try {
const client = await MongoClient.connect(url, {useNewUrlParser: true, useUnifiedTopology: true });
const db = client.db(dbName)
projectadded = await db.collection('Projets').insertOne(Projet)
projectadded = projectadded.ops[0]._id
client.close();
} catch (err) {
console.error(err);
}
return projectadded;
}
module.exports.saveProjectonDB = saveProjectonDB
当我调用此函数时,我使用以下代码:
Projet.prototype.saveProject = async function() {
let result = await OPonDB.saveProjectonDB(this)
console.log(result)
return result;
}
console.log
显示ID,非常完美。但是我不能使用它:如果我在server.js中调用我的函数:
let test = projet1.saveProject();
console.log(test)
结果为Promise ( <pending> )
我不明白为什么:该ID已经显示,因此它存在!
+我想在Projet
对象中添加“ ID”以供以后使用,但是this._id = result
或其他类似的尝试没有任何作用...
感谢您的帮助,我对此很无奈...
答案 0 :(得分:1)
由于它是一个异步函数,因此必须等待它。
您可以通过两种方式执行此操作:
let test = await projet1.saveProject();
console.log(test)
projet1.saveProject().then(test => { console.log(test); })
答案 1 :(得分:0)
您需要添加等待async
函数始终返回Promise
您需要使用await来获取值
因此您的代码应类似于let test = await projet1.saveProject();
答案 2 :(得分:0)
Hobey823解决了我的问题...
我之所以在Object projet1中看不到修改的唯一原因是由于时间问题。
Projet.prototype.saveProject = async function() {
var result = await OPonDB.saveProjectonDB(this)
this._id = result;
console.log(result)
return result;
}
此代码实际上有效,我可以在超时的情况下看到它:
setTimeout(() => console.log(projet1), 5000)