Escribí una función genérica de espera que tomaría la devolución de llamada y un tiempo de espera y esperaría. Desde mi comprensión y observación, mi código esperaría todo el tiempo y luego informaría el estado. Quiero borrar el tiempo de espera una vez que se alcanza la resolución. ¿Cómo puedo hacer eso?
var _timer; function waitForGeneric(method, max) { var start = Date.now(); return new Promise((resolve, reject) => { method(); function check() { result = _connected; if (result) { console.log('connected to server[connection status]: ' + result); window.clearTimeout(_timer); resolve(); } else { if (Date.now() - start > max) { console.log('waited for 30 seconds for connection[connection status]: ' + result); reject(); } else { timer = window.setTimeout(check, 1000); } } } check(); }); }¿Es esto correcto?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
No podré responder más a esto hasta mañana, y no necesariamente tengo las herramientas para probar lo que estás tratando de hacer para asegurarme de que esto es lo que buscas... pero si quieres ejecutar una función después de resolver una promesa, puede adjuntar el método .then() a la instancia de la promesa. Además, podría estar equivocado para su caso específico, pero normalmente no veo window.clearTimeout o window.setTimeout , sino que solo tienen sus llamadas de función respectivas como clearTimeout y setTimeout .
var _timer; function waitForGeneric(method, max) { var start = Date.now(); return new Promise((resolve, reject) => { method(); function check() { result = _connected; if (result) { console.log('connected to server[connection status]: ' + result); clearTimeout(_timer); resolve(); } else { if (Date.now() - start > max) { console.log('waited for 30 seconds for connection[connection status]: ' + result); reject(); } else { timer = setTimeout(check, 1000); } } } check(); }).then(function() { clearTimeout(_timer); }); }