# AttributeError: 'com.inductiveautomation.ignition.common.script.Imm' object has no attribute 'invokeLater'

**URL:** <https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151>\
**Category:** Ignition\
**Tags:** ignition80\
**Created:** [December 2, 2020, 6:57pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151 "2020-12-02T18:57:47Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![informatica](https://avatars.discourse-cdn.com/v4/letter/i/3ab097/32.png) [@informatica](https://forum.inductiveautomation.com/u/informatica)\
**Post date:** [December 2, 2020, 6:57pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/1 "2020-12-02T18:57:47Z")

</div>

Good afternoon.

In **Ignition 8.0.14** , when I try to use the “_**system.util.invokeLater ()**_” function in a _Gateway Event Script_ (_ **tag change** _), this error is logged in the logs:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/4/a4d730d318d045ba9923fba1f182fe9c734f3612.png)

This is the code:

```
def runThisLater():
	import system		
	Logger_Script = system.util.getLogger("probar")
	Logger_Script.info("hola")		    

system.util.invokeLater(runThisLater, 3000)

```

Best Regards.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 2, 2020, 6:59pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/2 "2020-12-02T18:59:31Z")

</div>

`invokeLater` is only available when code is executing in client/designer scope. If you understand what it’s actually doing - running some piece of code later _on the Swing Event Dispatch Thread_, then it should be obvious why.

Perhaps you are misusing/abusing `invokeLater`?

---

<div class="post-metadata">

**Author:** ![informatica](https://avatars.discourse-cdn.com/v4/letter/i/3ab097/32.png) [@informatica](https://forum.inductiveautomation.com/u/informatica)\
**Post date:** [December 2, 2020, 7:09pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/3 "2020-12-02T19:09:38Z")

</div>

I think your answer is very hasty. According to the documentation: “The Threading Library has a Timer function that works in a very similar fashion to invokeLater.”  
[https://docs.inductiveautomation.com/display/DOC81/Adding+a+Delay+to+a+Script](https://docs.inductiveautomation.com/display/DOC81/Adding+a+Delay+to+a+Script)

“Timer” does work in Gateway Events Script, so I thought “invokeLater” would work too.

When a tag changes, I need to execute a function after a few seconds, that’s why “invokeLater” seemed correct to me.  
I understand that I have to use “Timer”.

Best Regards.

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [December 2, 2020, 7:11pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/4 "2020-12-02T19:11:00Z")

</div>

@pturmel has a `later.py` implementation here on the forums that uses an (internal) class to allow for the ‘delayed execution’ functionality of `invokeLater` to work on the gateway.

---

<div class="post-metadata">

**Author:** ![informatica](https://avatars.discourse-cdn.com/v4/letter/i/3ab097/32.png) [@informatica](https://forum.inductiveautomation.com/u/informatica)\
**Post date:** [December 2, 2020, 7:13pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/5 "2020-12-02T19:13:42Z")

</div>

And what do you think about python’s **Timer** object?

[https://docs.inductiveautomation.com/display/DOC81/Adding+a+Delay+to+a+Script](https://docs.inductiveautomation.com/display/DOC81/Adding+a+Delay+to+a+Script)

Thank you.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [December 2, 2020, 7:19pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/6 "2020-12-02T19:19:49Z")

</div>

Bleh, I wish the training team hadn’t written those docs advocating the use of `invokeLater` as a convenient way to introduce a delay. That’s really not what it’s for.

Jython’s Timer seems fine, but it’s conceptually no different than just using `invokeAsync` and then sleeping as the first thing you do for the amount of delay you desire. Both end up using a dedicated Thread.

---

<div class="post-metadata">

**Author:** ![informatica](https://avatars.discourse-cdn.com/v4/letter/i/3ab097/32.png) [@informatica](https://forum.inductiveautomation.com/u/informatica)\
**Post date:** [December 2, 2020, 7:34pm UTC](https://forum.inductiveautomation.com/t/attributeerror-com-inductiveautomation-ignition-common-script-imm-object-has-no-attribute-invokelater/41151/7 "2020-12-02T19:34:26Z")

</div>

Thank you.
