I have a fiddle here
Can someone help me understand why the first setTimeout works but not on second one? Please see comments on the code.
In this case, I want to alert first I am first then after 6 seconds, it would alert Hello, sorry I am late
function iAmTakingTooLong(message1, message2, callback){       
    //setTimeout(function(){ alert('test'); },6000); //THIS WILL WAIT FOR 6000 MILLISECONDS
    setTimeout(callback(message1+message2),6000);    //THIS WILL NOT WAIT FOR 6000 MILLISECONDS
}
iAmTakingTooLong('Hello, ', 'sorry I am late!', function(fullmessage){
    alert(fullmessage);
});
alert("I am first!");
                In this code:
setTimeout(callback(message1+message2),6000);
you're calling the callback function right there in the argument list. JavaScript evaluates function arguments before calling the function, so what actually gets passed to setTimeout() here is whatever the callback function returns.
You need something like:
setTimeout(function() { callback(message1 + message2); }, 6000);
The behavior here is not unique to JavaScript.
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