为什么逻辑应用程序的 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 频道?,抱歉不记得了)并且不要指望它会很快改变。
如果任何一种情况都可能导致运行时错误,您需要分两步完成。
我在逻辑应用程序上遇到故障,因为 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 频道?,抱歉不记得了)并且不要指望它会很快改变。
如果任何一种情况都可能导致运行时错误,您需要分两步完成。