
[英]How to use "async/await" and "promises" for synchromous execution in Node.js?
[英]Node.js combining await/async with promises
我连接到 Node 中的 Postgres 数据库,并从数据库中获得返回值。 但是,当我尝试将该值传递给另一个 function 时,该值是undefined
。 看看这段代码:
async function doDbCall(queryString) {
await client.connect()
.then(async () => {
await client.query(queryString)
.then(dbRes => {
console.log("dbDoCall - dbRes", dbRes.rows[0]);
return dbRes;
})
.catch(ex => {
throw ex;
});
})
.catch(ex => {
throw ex;
})
.finally(() => {
client.end();
});
}
这里是调用 function:
async function testTheDb() {
try {
const myReturnVal = await dbConn.doDbCall("SELECT NOW() as now");
console.log("db val:", myReturnVal);
}
catch(ex) {
console.log("db err", ex.message);
}
}
在 query.then 成功的doDbCall()
中的 console.log 中,我在 dbRes.rows[0] 中得到一个值。 console.log 显示dbDoCall - dbRes { now: 2022-09-26T16:47:14.465Z }
。 所以我返回那个值。
但是,在testTheDb()
function 中,我有另一个控制台日志,其中记录了myReturnVal
的值。 该日志的结果显示db val: undefined
。
我的问题是:为什么myReturnVal
null 在 testTheDb() 中?
您不应将async
/ await
语法与.then()
调用混用。 您的问题是doDbCall
function 和async () => {…}
回调都不会返回任何内容,您唯一的return
关键字嵌套在嵌套的then
回调中。
你应该写
function doDbCall(queryString) {
return client.connect()
.then(() => {
return client.query(queryString);
})
.then(dbRes => {
console.log("dbDoCall - dbRes", dbRes.rows[0]);
return dbRes;
})
.finally(() => {
client.end();
});
}
或者
async function doDbCall(queryString) {
try {
await client.connect()
const dbRes = await client.query(queryString);
console.log("dbDoCall - dbRes", dbRes.rows[0]);
return dbRes;
} finally {
client.end();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.