javascript - 如何修复返回 `undefined` 的异步函数?

标签 javascript node.js async-await

我正在尝试从数据库返回计数。 count().exec 方法返回一个 Promise。我正在尝试解决它以便将值返回给用户。但它返回未定义

在我看来,我已经很好地使用了 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);
});

我只是想知道是否必须将所有不可告人的过程包装在我的函数调用中。因此,如果可能的话,也许会进行一些重构,以避免一些 hell 式的过程。无论如何,同时它可以工作,太棒了,谢谢。

最佳答案

您的estimation()函数返回undefined而不是返回一个promise,这是因为您从回调函数返回了新字符串。

countQuery.then(...) 替换为 return countQuery.then(...)

关于javascript - 如何修复返回 `undefined` 的异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52688855/

相关文章:

javascript - js-ctypes : Pointer to intptr_t

node.js - 找不到模块 'firebase-admin'

javascript - Travis-CI Node 构建随机失败

javascript - 从 AsyncStorage 检索 JWT 以使用 ApolloClient 创建 httpLink 中间件时出现问题

javascript - Babel CLI 引用错误 : regeneratorRuntime is not defined

javascript - 如何在没有 async 的情况下编写 async fetch() ?

javascript - 创建RGB颜色函数,javascript错误

javascript - 可编辑下拉菜单(g :select) grails

javascript - 如何使用 addEventListener 更改 div 的颜色

javascript - 在服务器上为 socket.io 运行 index.js 时出错