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"));
Both are technically the same.
The first solution runs an anonymous function that calls the resolve.
The second solution gets a reference to the resolve function that gets called in the end as well.
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"));