“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 的建议,但如果遇到问题,我会更新此线程。
我们使用 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 thereturn
keyword, although that would be valid too: The return value of anasync function
is implicitly wrapped inPromise.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 thatreturn await promiseValue
is functionally equivalent toreturn promiseValue
.
我在我的项目中尝试了使用和不使用 await
的错误处理,最终删除了触发警告的 await
。到目前为止,我还没有看到任何区别。我还注意到,如果您将相同的代码包装在 try / catch
中,则不会再引发声纳警告。
从现在开始,我会听从 Sonar 的建议,但如果遇到问题,我会更新此线程。