Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

85
Views
Rompecabezas de promesas

Estuve leyendo en un blog sobre Promises y muestran un problema que no entiendo en absoluto. El blog es: https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html .

El escritor presenta 4 acertijos con una solución gráfica:

Rompecabezas #1

 doSomething().then(function () { return doSomethingElse(); }).then(finalHandler);

Rompecabezas #2

 doSomething().then(function () { doSomethingElse(); }).then(finalHandler);

Rompecabezas #3

 doSomething().then(doSomethingElse()) .then(finalHandler);

Rompecabezas #4

 doSomething().then(doSomethingElse) .then(finalHandler);

Aquí doSomething() y doSomethingElse son promesas.

¿Alguien puede explicar todos los detalles? En el primero recibo la orden de ejecución. En el segundo, no entiendo por qué doSomethingElse y finalHandler comienzan y terminan al mismo tiempo. En el tercero, no entiendo por qué doSomething y doSomethingElse comienzan al mismo tiempo. ¿No debería doSomethingElse comenzar al final de doSomething? En cuarto, no consigo nada...

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Rompecabezas 1

 // doSomething() is executed and returns a promise doSomething().then(function () { // when doSomething() executes successfully, execute doSomethingElse() and return the Promise return doSomethingElse(); }).then(finalHandler); // final handler will be executed once doSomethingElse has finished, since the promise was returned

Rompecabezas 2

 // doSomething() is executed and returns a promise doSomething().then(function () { // when doSomething() executes successfully, execute doSomethingElse() doSomethingElse(); // execute doSomethingElse() // since there is nothing returned here, the the promise will resolve immediatly, without waiting for doSomethingElse() to complete }).then(finalHandler); // final handler will be executed immediatly after doSomethingElse() has started to execute, without waiting for a result.

Rompecabezas 3

En este, ambas funciones comienzan al mismo tiempo porque .then espera una función como primer argumento. doSomethingElse es una función, pero doSomethingElse() es una llamada de función. Por lo tanto, se llama inmediatamente y .then() toma como primer argumento el valor de retorno de doSomethingElse , que es una promesa.

 doSomething().then(doSomethingElse()) .then(finalHandler);

Rompecabezas 4

A diferencia del rompecabezas 3, la función doSomethingElse se pasa a .then() , en lugar del valor de retorno de doSomethingElse en el rompecabezas 3. Esto significa que se llamará a doSomethingElse una vez que se haya hecho doSomething .

 // the code below is a shortcut for doSomething().then(() => doSomethingElse()) doSomething().then(doSomethingElse) .then(finalHandler);

Función frente a llamada de función

Lo que debe comprender es la diferencia entre una función ( doSomething ) y una llamada de función ( doSomething() ).

 function doSomething() { return "something"; } const func = doSomething; const value = doSomething(); console.log(func); console.log(value);

about 4 years ago · Juan Pablo Isaza Report

0

Los rompecabezas n.° 1 y n.° 4, así como los rompecabezas n.° 2 y n.° 3, son iguales.

En tu Rompecabezas #2, comienzas otra Promesa y regresas instantáneamente, sin esperarla. Por lo tanto, se llamará a su controlador final inmediatamente después de que se inició doSomethingElse, no después de que haya terminado. Si quieres eso, usa tu Rompecabezas #1

En su Rompecabezas n. ° 3, pasa la Promesa iniciada devuelta por doSomethingElse() directamente en lugar de decirle a js que llame a esa función si doSomething se resuelve. Si quieres hacerlo, escríbelo así; podría ayudar a evitar confusiones.

 doSomething() .then(() => doSomethingElse()) .then(() => finalHandler());
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!