DataFlex
DataFlex
Prevent JavaScript Infinite Loops
See more JavaScript Examples
Demonstrates how prevent infinite loops or prevent the JavaScript from running for a longer amount of time than allowed.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Variant vSbScript
Handle hoSbScript
Handle hoJs
Variant vResult
Handle hoResult
String sTemp1
Move False To iSuccess
// This is the JavaScript we'll run:
// console.log('Starting infinite loop...'); while(true) {};
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbScript
If (Not(IsComObjectCreated(hoSbScript))) Begin
Send CreateComObject of hoSbScript
End
Get ComAppend Of hoSbScript "console.log('Starting infinite loop...'); while(true) {};" To iSuccess
Get Create (RefClass(cComChilkatJs)) To hoJs
If (Not(IsComObjectCreated(hoJs))) Begin
Send CreateComObject of hoJs
End
// Set a limit on the amount of time (in seconds) the script is allowed to run.
// If the JavaScript takes longer than this amount of time, then Chilkat kills the script without crashing the host program.
// The default value of TimeoutSeconds is 0, which indicates no limit.
// For this example, set a limit of 2 seconds.
Set ComTimeoutSeconds Of hoJs To 2
Get Create (RefClass(cComChilkatJsonObject)) To hoResult
If (Not(IsComObjectCreated(hoResult))) Begin
Send CreateComObject of hoResult
End
Set ComEmitCompact Of hoResult To False
// Run the script..
Get pvComObject of hoSbScript to vSbScript
Get pvComObject of hoResult to vResult
Get ComEval Of hoJs vSbScript vResult To iSuccess
If (iSuccess = False) Begin
// Examine the result for an exception.
Get ComEmit Of hoResult To sTemp1
Showln sTemp1
// The result contains this:
// {
// "exception": {
// "message": "interrupted - JavaScript exceeded the Chilkat.Js.TimeoutSeconds",
// "stack": [
// {
// "func": "<eval>",
// "file": "<input>",
// "line": 1,
// "col": 8
// }
// ]
// }
// }
// Also examine the LastErrorText.
Get ComLastErrorText Of hoJs To sTemp1
Showln sTemp1
Procedure_Return
End
// We should never get here..
Showln "Succeeded."
Get ComEmit Of hoResult To sTemp1
Showln sTemp1
End_Procedure