Search code examples
javascriptpromisesettimeoutarrow-functions

Difference between two ways of resolving a promise


I would like to understand the difference between the two code snippets, both resolving promises in different ways but receiving the same result (resolving after a second).

Which one is the right way?

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(() => resolve(), 1000)
)}

longTask().then(() => console.log("done"));

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(resolve, 1000)
)}

longTask().then(() => console.log("done"));


Solution

  • In this case, where you're not resolving with a value, there is no difference. In situations where you need to resolve the promise with a value, you would want to use the first example so you can control what is passed into the resolve function.

    function longTask(){
        return new Promise((resolve, reject) =>
        setTimeout(() => resolve(someResolvedValue), 1000)
    )}
    
    longTask().then(() => console.log("done"));

    Edit: Or you can use the second example and pass the resolved value as the third argument to setTimeout. thanks to VLAZ for pointing this out.

    function longTask(){
        return new Promise((resolve, reject) =>
        setTimeout(resolve, 1000, someResolvedValue)
    )}
    
    longTask().then(() => console.log("done"));