【问题标题】:Can't send response after executed function NodeJS执行功能NodeJS后无法发送响应
【发布时间】:2018-08-16 00:24:37
【问题描述】:

我创建了我们可以在下面看到的函数:

    Board.aggregate(pipeline, function (err, result) {
      if (err) res.send(err);

      replace(result)
        .then((result) => {
          res.send(result);
        })

    })
  })


function replace(result)  { 
  result.forEach((element, key) => {
    User.find({ _id: element.boardcards.members })
      .then((users) => {
        element.boardcards.members = [];

        for (var i = 0; i < users.length; i++) {
          element.boardcards.members.push(users[i].firstName + ' ' + users[i].surname);
        }
        console.log(element.boardcards.members)
      })
  }) 
  return result; 
}

当我运行项目时出现错误:

TypeError: replace(...).then 不是函数

我想在执行函数替换后将修改后的结果发送到浏览器。 , 谁能告诉我我做错了什么。

【问题讨论】:

  • 嗯...我的意思是...return result; 结果显然不是一个承诺。这是你传递给它的任何东西。 array.forEach 不会改变它。
  • 嘿凯文谢谢你的回答,你能告诉我我该怎么办吗?

标签: node.js


【解决方案1】:

如果你想以这种方式使用它,你需要让 replace 返回一个承诺。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

可能因为您想要执行多个查询,您将使用 Promise.all。

【讨论】:

  • 我想做一个响应,替换数组后,我只想响应变量,真的我应该用promise all吗?
  • 如果你使用replace.then(),你的replace必须在你多次调用User.find的代码示例中返回一个Promise,这让我相信你想要所有的用户。在获得所需的所有结果之前找到已解决的承诺。对于这个 promise.all 是一个很好的方法。在我看来,您似乎不想学习 Promise,如果是这样,那就不要费心学习 JavaScript。
  • 为什么代码不想分配新值:element.boardcards.members.push(users[i].firstName + ' ' + users[i].surname);
猜你喜欢
  • 2017-05-15
  • 2019-06-22
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2011-03-23
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
相关资源
最近更新 更多