javascript - 如何修复返回“未定义”的异步函数?
问题描述
我正在尝试从我的数据库中返回计数。该count().exec
方法返回一个 Promise。我正在尝试解决它以便将值返回给用户。但它返回undefined
。
在我看来,我很好地使用了 async/await 模式,那么有什么问题吗?我想不通。
这是我的片段:
app.get("/blog/page/:pageTargeted", (req, res) => {
var countQuery = Posts.estimatedDocumentCount().exec();
// estimate count of document in collecion
function estimation() {
countQuery.then(count => {
countStringified = count.toString();
return countStringified;
})
} // console.log => successfully returns a value
// set Data
async function setData() {
let countStringified = await estimation();
return countStringified;
}
// send Data
function sendData() {
setData().then(result => console.log("result in sendData: ", result));
} // undefined
sendData();
});
*** 编辑 *** :它现在可以工作了,这是我的新片段:
setData().then(result => { // call an async/await functions chain
console.log("count in Post.find: ", result);
console.log("pageTargeted in Post.find: ", pageTargeted);
if (err) return console.error(err);
res.status(200).send(result);
});
我只是想知道我是否必须将所有不可告人的过程包装在我的函数调用中。因此,如果可能的话,可能会进行一些重构以避免一些地狱式的过程。无论如何,同时它可以工作,太好了,谢谢。
解决方案
您的 estimate() 函数返回未定义而不是返回承诺,这是因为您从回调函数返回了新字符串。
替换countQuery.then(...)
为return countQuery.then(...)
.
推荐阅读
- tensorflow - 如何在flask中同时预测由tensorflow(.pb)模型和keras模型(.h5)组成的多个模型?
- python-3.x - 请求库引发 urllib 连接错误
- java - 我的 ConnectFour 游戏在正方形网格但不在矩形网格中时有效
- ruby-on-rails - 对危险方法爆炸的规则感到困惑
- kubernetes-apiserver - preStop hook inside pod using K8s API
- traefik - Traefik v2 Middlewares not being detected
- c# - 无法从 DataTable 中选择 DataRow
- python - How to load a comment form in DetailView?
- html - How to set different td sizes with inputs in them?
- android - Error inflating class androidx.constraintlayout.widget.ConstraintLayout in Android 4