请参阅下面的函数fnWaitCheckFinalStatus
如果在下面的代码中执行了其他部分,那么按函数fnWaitCheckFinalStatus
返回的值将变为空白,因为函数会递归调用fnWaitCheckFinalStatus
。
有没有办法获得fnWaitCheckFinalStatus
的返回值退出函数函数退出所有状态后。
如何才能实现这一目标。
Function fnWaitCheckFinalStatus(objStatusBar)
Dim blnRetValue : blnRetValue = True
Dim i : i=0
If objStatusBar.Exist Then
strValue=ObjStatusBar.GetROProperty("text")
Do
wait 10
strValue=ObjStatusBar.GetROProperty("text")
Loop While strValue = "Task Started"
End If
strValue1=ObjStatusBar.GetROProperty("text")
If strValue1="Task executed successfully" Then
blnRetValue1=True
fnWaitCheckFinalStatus = blnRetValue1
Exit Function
ElseIf strValue1="Task execution failed" Then
blnRetValue1=False
fnWaitCheckFinalStatus = blnRetValue1
Exit Function
Else
Call fnWaitCheckFinalStatus(objStatusBar)
End If
End Function
答案 0 :(得分:1)
如果从递归返回,请考虑“传递”函数结果,就像在此代码中一样(注意带有!!!注释的行):
Function fnWaitCheckFinalStatus(objStatusBar)
Dim i : i=0
If objStatusBar.Exist Then
strValue=ObjStatusBar.GetROProperty("text")
Do
wait 10
strValue=ObjStatusBar.GetROProperty("text")
Loop While strValue = "Task Started"
End If
strValue1=ObjStatusBar.GetROProperty("text")
If strValue1="Task executed successfully" Then
fnWaitCheckFinalStatus = true
ElseIf strValue1="Task execution failed" Then
fnWaitCheckFinalStatus = false
Else
fnWaitCheckFinalStatus=fnWaitCheckFinalStatus(objStatusBar) ' !!!
End If
End Function
另外,我删除了结果缓冲区变量。你不需要它,所以你可以抓它。
另外,在这种情况下我会避免使用exit function
来保持代码更简单(一个入口点,一个出口点),所以我也将其删除了。
一般来说,没有明显的理由在这里使用递归,因为您传递的是与您收到的完全相同的参数,因此递归调用将与其调用者作用域完全相同。请改用循环。