即使显示了结果也无法从异步函数中提取结果
我想使用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
或其他类似的尝试没有任何作用...
感谢您的帮助,我对此很无奈...
回答如下:您需要添加一个等待async
函数总是返回Promise
您需要使用await来获取值
所以您的代码应类似于let test = await projet1.saveProject();
即使显示了结果也无法从异步函数中提取结果
我想使用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
或其他类似的尝试没有任何作用...
感谢您的帮助,我对此很无奈...
回答如下:您需要添加一个等待async
函数总是返回Promise
您需要使用await来获取值
所以您的代码应类似于let test = await projet1.saveProject();