Logic Apps中Until循环首次满足条件却超时问题排查
变量类型不匹配是核心诱因
比如你初始化变量时选了布尔型(默认值false),但Set variable步骤里把值设成了字符串'TRUE',此时终止条件里的@equals(variables('你的变量名'), 'TRUE')永远不成立——因为一边是布尔值true,一边是字符串'TRUE',类型不匹配导致比较结果始终为false。反过来,如果变量是字符串类型,终止条件用布尔值true比较也会失败。
解决:统一类型即可——要么变量设为布尔型,终止条件写@equals(variables('你的变量名'), true)(注意true不加引号),Set variable时直接选择布尔值true;要么变量设为字符串型,终止条件写@equals(variables('你的变量名'), 'TRUE'),Set variable时设为字符串'TRUE'。终止条件表达式存在拼写错误
检查表达式里的变量名是否拼写正确,Logic Apps的变量名区分大小写。比如变量名叫IsCompleted,你写成iscompleted,表达式就无法取到正确值,导致条件判断失效。循环体中变量被意外覆盖
确认Set variable步骤之后,有没有其他操作(比如后续的Compose、通知步骤)不小心修改了这个变量的值,把它改回false或其他不符合终止条件的内容。对Until循环执行逻辑的误解
Logic Apps的Until循环逻辑是先检查终止条件,不满足才执行循环体。如果初始化时变量已经是true,循环不会启动;如果初始值是false,第一次进入循环体执行Set variable设为true后,下一次检查条件就应该停止循环。如果没停,基本可以锁定是变量类型不匹配的问题。
优先排查变量类型和终止条件的一致性,这是这类问题最常见的根源。
内容的提问来源于stack exchange,提问作者DryBSMT

