为什么逻辑应用程序的 if() 表达式同时执行两个代码路径?

Why is Logic Apps' if() expression executing both code paths simultaneously?

我在逻辑应用程序上遇到故障,因为 if() 表达式正在执行 true 和 false 路径。如果执行错误路径,它将失败,这就是为什么我首先将它放在 if() 中的原因。

表达式为:

if(empty(triggerBody()?['data']?['eta']), null, formatDateTime(triggerBody()?['data']?['eta'], 'yyyy-MM-dd'))

我也试过:

if(equals(triggerBody()?['data']?['eta'], null), null, formatDateTime(triggerBody()?['data']?['eta'], 'yyyy-MM-dd'))

数据为空:

...
"data": {
    "eta": null,
...

我已经通过将 formatDateTime() 换成像 'is not null' 这样的字符串来测试它。当我这样做时,我得到了预期的输出(空)并且没有失败。

更新: Logic Apps 团队的某人建议将以下内容作为替代方案:

@if(empty(triggerBody()?['data']?['eta']), null, formatDateTime(coalesce(triggerBody()?['data']?['eta'], '1999-01-01'), 'yyyy-MM-dd'))

这里建议使用coalesce(),因为它returns是第一个非空结果。所以通过这种方式,我至少可以放心地为 formatDateTime().

提供一个值

为什么?因为它就是这样写的。 ;)

您看到的是 if() 在 LogicApp 中执行的预期行为。 LogicApp 团队的某个人提到了这一点(第 9 频道?,抱歉不记得了)并且不要指望它会很快改变。

如果任何一种情况都可能导致运行时错误,您需要分两步完成。