Me gustaría entender la diferencia entre los dos fragmentos de código, ambos resolviendo promesas de diferentes maneras pero recibiendo el mismo resultado (resolviendo después de un segundo).
¿Cuál es el camino correcto?
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"));Ambos son técnicamente iguales.
La primera solución ejecuta una función anónima que llama a resolve .
La segunda solución obtiene una referencia a la función de resolve que también se llama al final.
En este caso, donde no está resolviendo con un valor, no hay diferencia. En situaciones en las que necesite resolver la promesa con un valor, querrá usar el primer ejemplo para poder controlar lo que se pasa a la función de resolve .
function longTask(){ return new Promise((resolve, reject) => setTimeout(() => resolve(someResolvedValue), 1000) )} longTask().then(() => console.log("done"));Editar: O puede usar el segundo ejemplo y pasar el valor resuelto como tercer argumento a setTimeout. gracias a VLAZ por señalar esto.
function longTask(){ return new Promise((resolve, reject) => setTimeout(resolve, 1000, someResolvedValue) )} longTask().then(() => console.log("done"));