Search code examples
javascriptreturnsettimeoutreturn-value

Get return value from setTimeout


I just want to get the return value from setTimeout but what I get is a whole text format of the function?

function x () {
    setTimeout(y = function () {
        return 'done';
    }, 1000);
    return y;
}

console.log(x());

Solution

  • 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!';
    }