最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

即使显示了结果也无法从异步函数中提取结果

IT培训 admin 3浏览 0评论

即使显示了结果也无法从异步函数中提取结果

我想使用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();

发布评论

评论列表 (0)

  1. 暂无评论