gpt4 book ai didi

mongodb - 在不调用 .exec() 的情况下使用 mongoose 从错误中获取堆栈跟踪?

转载 作者:行者123 更新时间:2023-12-04 14:52:45 25 4
gpt4 key购买 nike

我最近在 mongoose 文档中读到要从 mongoose 错误中获取堆栈跟踪,其中包括有关从哪个文件调用 mongoose 代码的详细信息,您需要调用 .exec() 吗?

示例:

我目前有很多代码使用这种结构:

await collection.deleteMany({});

我是否需要添加 .exec() 以获得更有用的堆栈跟踪?

await collection.deleteMany({}).exec();

如果是这样,是否有全局解决方法,这样我就不必无数次添加 .exec()?

引用资料:

https://mongoosejs.com/docs/promises.html#should-you-use-exec-with-await https://github.com/Automattic/mongoose/issues/8747

最佳答案

不,如果不使用 .exec(),您将无法通过 await 获得正确的堆栈跟踪。

详细说明 in another issue在您链接的 GitHub 问题中引用:

await Model.findOne() without exec() will unfortunately remove the calling file from the stack trace because of how V8's await handles custom thenables.

您还可以在 the source for Query.prototype.then 中看到这一点,它会在后台调用 exec(),然后对其结果调用 .then(),这会阻止 JavaScript 将错误追溯到您的代码。

因此,对此没有解决方法,您需要将代码库迁移到使用 exec(),或者希望改进 Node.js 引擎以更好地处理此问题一些点。

关于mongodb - 在不调用 .exec() 的情况下使用 mongoose 从错误中获取堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68786398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com