[expressjs/express]警告:在处理程序中创建了一个承诺,但尚未返回。

2024-07-04 114 views
8

BLUEBIRD_WARNINGS此行似乎在时引发警告on

https://github.com/expressjs/express/blob/d2e6e3381ccbabfe300166afc75c432aee961ece/lib/router/index.js#L284

代码甚至似乎没有使用承诺,所以我不确定它是怎么回事。

(节点:49047)警告:在 Users/.../node_modules/express/lib/router/index.js:284:7 的处理程序中创建了一个承诺,但尚未从中返回,请参阅http://goo.gl/rRqMUw 上的 Function.Promise.attempt.Promise.try(/Users/.../node_modules/bluebird/js/release/method.js:29:9)

回答

1

也许@petkaantonov 可以加入讨论?

6

是的,据我所知,目前 Express 中没有承诺。我们可以随时查看并尝试找出原因,您能否提供以下所有内容,以便我们重现该问题?

  1. Node.js 版本
  2. Express 版本
  3. 完整的代码我们可以不加修改地复制粘贴并运行以重现问题。如果这包括任何其他模块,请列出确切的版本。
  4. 如何查看打印的警告的完整说明。例如,向特定 URL 发出请求。

谢谢!

7

警告:在 node_modules/express/lib/router/layer.js:95:5 的处理程序中创建了一个承诺,但尚未从中返回,请参阅http://goo.gl/rRqMUw 的 Function.Promise.bind(node_modules/bluebird/js/release/bind.js:65:20)

  1. 节点:8.9.4
  2. Express:4.16.2

我会尝试找出导致这些错误的其他原因。仅使用 express 无法重现此错误

7

当你使用 return 时,这种情况似乎不再发生return res.json({something: true});

5

@moltar 您使用的是 Sequelize 吗?我在 Express 中根本找不到 Bluebird。它可能来自另一个库。

检查一下

5

@moltarnpm ls bluebird在您的项目主目录中运行,您将看到所有使用的依赖项bluebird。 Express 不是其中之一。 对我来说它是 Sequelize。

7

将其放入我的 .env 文件中会隐藏警告:

# Background: https://github.com/sequelize/sequelize/issues/4883#issuecomment-198231939
BLUEBIRD_DEBUG=0
0

是的,我知道 express 不使用也不依赖 promises/bluebird。也许这不是发布此内容的正确地方。我只是不知道谁是“错的”。我不知道这些未解决的承诺是如何被跟踪的,我想也许是通过静态分析,而这在某种程度上错误地触发了这种情况……希望 bluebird 作者可以参与进来。

5

@moltar 阅读我上面发布的链接,保证让你明白这里出了什么问题

8

@Milad 我读过你的链接。我仍然不明白为什么会出现错误,但现在我知道如何修复了。