+ 4
Why this function with setTimeout is returning the output as 'undefined'?
function wait(value, timespan) { setTimeout(function() { return value; }, timespan); } var n = wait(5, 1000); //undefined
9 Answers
+ 3
Luis Febro 🇧🇷
I think I figured it out. Maybe because at the time of function call the value is not yet set.
Check out my code:
function wait(value, timespan) {
setTimeout(wait,timespan,value);
return value;
}
var n = wait(5, 1000);
function output() {
alert(n);
}
https://code.sololearn.com/WcWpgB5Efw0w/?ref=app
+ 6
Luis Febro 🇧🇷
The code is working fine for me so it's probably the device you are viewing it on that doesn't have support it.
To be honest though your solution is much better anyway especially for browser compatibility so I'd recommend using that instead.
+ 5
Because the code won't stop for the setTimeout function to run your n variable may not have a value if you try to use it immediately after is declared.
e.g.
var n = wait(5, 1000); // Takes 1s to define
console.log(n); // Runs 100ms after declaration
+ 5
(Sorry, took me awhile to sort an hitch in this code)
In the second section of your code the "setTimout" in the function isn't actually doing anything and the value is still immediately returned.
The first thing that comes to mind would be to use the ES7 await/async syntax and the ES6 Promise syntax so the code would be paused while the wait function runs:
https://code.sololearn.com/WM6L2TxLmdV6/?ref=app
+ 4
Pete Wright I created this code with setInterval and SetTimeout timer functions. There is a little glitch in the code where you find 'not working' but if you stop before the countdown is up, no bug is found. Moreover, this unworking chunk of code aims to delete all elements but for now it only deletes the first one. But it supposed to happen after 30 seconds though.
Check it out:
https://code.sololearn.com/WxqKxYlKbqkM/?ref=app
+ 3
LynTon Yeah. You may be right. But I have the latest version of this app. But to be honest, my mobile is 2 years old really. It is getting old dawn right. Heh
Yeah, Es7 is far much uncomplicated and got a cleaner syntax but backward compability is still an issue in the WWW. Nevertheless, I have been learning Babeljs which compiles the most recently added features - including Es7, ESNext ones - into Es5, the most compatible version of JS which is suitable along with both for old and modern browsers. It is really an amazing tool.
+ 2
LynTon it seems that Es7 and latest JS's syntaxes are not working in SoloLearn playground. Thus your code is not working. Pops up a bug when pushing the button. Maybe a Babeljs-like solution would suit well for this platform to enable these new syntaxes. But I do not know how workable it should be to implement it properly.
+ 1
Thanks for clarification of yours. Now I got it.
+ 1
LynTon
Now I am confused.
When I set the timespan in my code to let's say 5000, it still alerts the value immediately without waiting.
Is there any way in JS to delay a variable assignment?