Get return value from setTimeout
You can't get a return value from the function you pass to setTimeout
.
The function that called setTimeout
(x
in your example) will finish executing and return before the function you pass to setTimeout
is even called.
Whatever you want to do with the value you get, you need to do it from the function you pass to setTimeout
.
In your example, that would be written as:
function x () {
setTimeout(function () {
console.log("done");
}, 1000);
}
x();
You need to use Promises for this. They are available in ES6 but can be polyfilled quite easily:
function x() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('done!');
});
});
}
x().then((done) => {
console.log(done); // --> 'done!'
});
With async
/await
in ES2017 it becomes nicer if inside an async
function:
async function() {
const result = await x();
console.log(result); // --> 'done!';
}