“await”不应该被冗余地用于 bot 框架

“await” should not be used redundantly for bot framework

我们使用 Azure 机器人框架开发了一个聊天机器人。作为我们 CI-CD 管道的一部分,我们使用 Sonar Qube 进行静态代码分析。

Sonar 将代码异味的多个实例显示为“在 return 值上冗余使用 await”。 Sonar 的建议是不要使用 await,因为 async 方法应该使用 promise。

不过,此方法取自微软提供的BOT Framework示例(https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/typescript_nodejs/13.core-bot/src/dialogs/bookingDialog.ts)

您能否确认 Microsoft 的建议是否已更改,或者这似乎是来自 SonarQube 的误报?

首先,这个 Sonar 规则是大约 2 年前在这个 Pull Request with this example

中添加的

然后我发现那些回答类似问题的 SO 文章:, 但我仍然不清楚,所以我继续寻找。

最后我查看了这个 documentation 并在提供的最后一个示例中找到了我正在寻找的答案。

In the above example, notice there is no await statement after the return keyword, although that would be valid too: The return value of an async function is implicitly wrapped in Promise.resolve - if it's not already a promise itself (as in this example).

Note: The implicit wrapping of return values in Promise.resolve does not imply that return await promiseValue is functionally equivalent to return promiseValue.

我在我的项目中尝试了使用和不使用 await 的错误处理,最终删除了触发警告的 await。到目前为止,我还没有看到任何区别。我还注意到,如果您将相同的代码包装在 try / catch 中,则不会再引发声纳警告。

从现在开始,我会听从 Sonar 的建议,但如果遇到问题,我会更新此线程。