• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

113
Views
¿Promesa de resolución/rechazo evaluando instantáneamente a pesar de que debería estar esperando otra promesa?

Estoy usando una serie de promesas para mantener el orden correcto de las operaciones para poder cargar algunos datos e inicializar algunos objetos antes de que se cargue mi aplicación/página.

En el proceso de hacer que mi código sea más modular para poder reutilizar algunas de las funciones, aparentemente me excedí en mi comprensión de las promesas y descubro que la cadena .then después de initApp() no se ejecuta nunca; la promesa es simplemente resuelto/rechazado al instante.

Mi función getData funciona perfectamente:

 function getData(promises, callback) { let getDataComplete = new Promise(function (resolve, reject) { Promise.all(promises) .then(function () { if (callback && typeof callback === "function") { debug_log("getData: running callback"); callback(); } return resolve; }) .catch(function (error) { return reject; }); }); return getDataComplete; }

¿Pero la sección a continuación (que la ejecuta) no espera a que termine?

 const initApp = new Promise((resolve, reject) => { let dataReturned = getData([ getPartners, getProducts, getCurrencies, getSites ]); if (dataReturned == resolve) { debug_log("resolve initapp") resolve; } else { debug_log("reject initapp") reject; } }); initApp .then(() => { initJSComponents(); }) .catch((error) => { debug_log("Problem during js component initialisation.", error); }) .then(() => { initDOM(); }) .then(function () { //some more stuff here }) .catch((error) => { debug_log("Problem during initialisation.", error); });

¿Algunas ideas? Estoy perplejo y lo he estado mirando y reescribiendo una y otra vez durante horas.

almost 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Tiene su función getData devolviendo Promise , pero no usó los métodos Promise#then o Promise#catch después de la ejecución. Entonces, después de llamar a esta función, obtendrá el objeto Promise inmediatamente sin esperar. Probablemente deberías cambiar tu función initApp así:

 const initApp = new Promise((resolve, reject) => { getData([ getPartners, getProducts, getCurrencies, getSites ]).then(() => { debug_log("resolve initapp") resolve(); }).catch(() => { debug_log("reject initapp") reject(); }); });

Solo después de eso, su initApp resolverá (o rechazará) su Promise después de que la Promise devuelta por la función getData se resuelva (o rechace).

almost 3 years ago · Juan Pablo Isaza Report

0

function getData(promises, callback) { return new Promise(function (resolve, reject) { Promise.all(promises) .then(function () { if (callback && typeof callback === "function") { debug_log("getData: running callback"); callback(); } resolve(); }) .catch(function (error) { reject(); }); }); }

 const initApp = new Promise((resolve, reject) => { getData([ getPartners, getProducts, getCurrencies, getSites ]).then(allFine => { resolve(); }, somethingWrong => { reject(); }); }); initApp .then(() => { initJSComponents(); }) .catch((error) => { debug_log("Problem during js component initialisation.", error); }) .then(() => { initDOM(); }) .then(function () { //some more stuff here }) .catch((error) => { debug_log("Problem during initialisation.", error); });
almost 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error