【问题标题】:“await” should not be used redundantly for bot framework“等待”不应该被冗余地用于机器人框架
【发布时间】:2021-05-21 04:56:23
【问题描述】:

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

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

但是,此方法取自 Microsoft (https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/typescript_nodejs/13.core-bot/src/dialogs/bookingDialog.ts) 提供的 BOT 框架示例

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

【问题讨论】:

  • 当你说“Sonar 的建议是不要使用 await 因为异步方法应该使用 promise”时你是什么意思?听起来您说“等待”和“承诺”是两种不同的做事方式,但这没有意义,因为它们是相同的。承诺是你所期待的。你在等待承诺。
  • @KyleDelaney:SonarQube 将此显示为代码气味“在返回值上冗余使用 await
  • 是的,我已经在你的问题中看到了。你明白我在问什么吗?

标签: sonarqube azure-bot-service


【解决方案1】:

首先,这个Sonar 规则是在大约2 年前添加到这个Pull Request 和这个example

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

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

在上面的示例中,请注意 return 关键字后面没有 await 语句,尽管这也是有效的:async function 的返回值隐式包装在 Promise.resolve 中 - 如果它还没有一个承诺本身(如本例所示)。

注意:Promise.resolve 中返回值的隐式包装并不意味着 return await promiseValue 在功能上等同于 return promiseValue

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

从现在开始,我会听从 Sonar 的建议,但如果我遇到问题会更新这个帖子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多