Since when using sql lite if you try and do a function at the same moment it throws an error, im just trying to make a function that will check if its executing, and if it is try again in 10 milliseconds, this exact function works fine if i dont have to pass any arguments to the function but im confused how I can pass the vars back into the function it'll be executing.
I want to do:
timer.addEventListener(TimerEvent.TIMER, saveChat(username, chatBoxText));
But it will only allow me to do:
timer.addEventListener(TimerEvent.TIMER, saveChat);
It gives me this compile error:
1067: Implicit coercion of a value of type void to an unrelated type Function
How can I get this to pass this limitation?
Here's what I've got:
public function saveChat(username:String, chatBoxText:String, e:TimerEvent=null):void { var timer:Timer = new Timer(10, 1); timer.addEventListener(TimerEvent.TIMER, saveChat); if(!saveChatSql.executing) { saveChatSql.text = "UPDATE active_chats SET convo = '"+chatBoxText+"' WHERE username = '"+username+"';"; saveChatSql.execute(); } else timer.start(); }
A function called by a listener can only have one argument, which is the event triggering it.
listener:Function
— The listener function that processes the event. This function must accept an Event object as its only parameter and must return nothing, as this example shows:
function(evt:Event):void
Source
You can get around this by having the function called by the event call another function with the required arguments:
timer.addEventListener(TimerEvent.TIMER, _saveChat); function _saveChat(e:TimerEvent):void { saveChat(arg, arg, arg); } function saveChat(arg1:type, arg2:type, arg3:type):void { // Your logic. }
Another thing you can do create a custom event class that extends flash.events.Event
and create properties that you need within.
package { import flash.events.Event; public class CustomEvent extends Event { // Your custom event 'types'. public static const SAVE_CHAT:String = "saveChat"; // Your custom properties. public var username:String; public var chatBoxText:String; // Constructor. public function CustomEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false):void { super(type, bubbles, cancelable); } } }
Then you can dispatch this with properties defined:
timer.addEventListener(TimerEvent.TIMER, _saveChat); function _saveChat(e:TimerEvent):void { var evt:CustomEvent = new CustomEvent(CustomEvent.SAVE_CHAT); evt.username = "Marty"; evt.chatBoxText = "Custom events are easy."; dispatchEvent(evt); }
And listen for it:
addEventListener(CustomEvent.SAVE_CHAT, saveChat); function saveChat(e:CustomEvent):void { trace(e.username + ": " + e.chatBoxText); // Output: Marty: Custom events are easy. }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With