【发布时间】:2018-11-22 16:09:45
【问题描述】:
这里开始感觉很厚。读了很多书,我相信我很好地理解了 promises 和 async-await。但是,我似乎很难在其他地方使用该函数,这样我才能获得结果(例如,我在另一个 js 文件中挂起:let dbConnection = dbOperations.openDatabaseConnection();)。
有人可以向我解释为什么我一直在等待以下函数(用 promise 和 asyncawait 编写的相同函数)吗?在函数内返回之前,我可以按预期控制台记录 dbConnection 结果。另外,我特别热衷于从这个意义上理解 Promise,因为似乎许多 npm 包似乎都返回了 Promise(根据我的经验,至少 async-await 不能很好地适应它?-> 使用 async 不会等待根据我的经验解决)。
//建立数据库连接
function openDatabaseConnection() {
let dbConnection = {};
return mongodb.connect(dbUri).then(conn => {
dbConnection.connection = conn;
return dbConnection;
})
.then(() => {
dbConnection.session = dbConnection.connection.db(dbName);
//console.log(dbConnection);
return dbConnection;
})
.catch(err => {
throw err;
});
};
//建立数据库连接
async function openDatabaseConnection() {
let dbConnection = {};
try {
dbConnection.connection = await mongodb.connect(dbUri);
dbConnection.session = await dbConnection.connection.db(dbName);
} finally {
//console.log(dbConnection);
return dbConnection;
};
};
【问题讨论】:
-
“我一直处于待处理状态”是什么意思?
-
如果你的
then接受了返回的连接会更有意义,那么你就不需要let dbConnection,即.then((dbConnection) => {dbConnection.session... -
谢谢利亚姆,注意到您也为下面的答案做出了贡献,这很好地解释了这一点
标签: javascript mongodb promise async-await