Me gustaría tener una promesa cancelable que informe el progreso al mismo tiempo. Algo así como una combinación de p-progreso y p-cancelable . Y aunque el uso de cualquiera de ellos por separado es simple, me cuesta un poco combinarlos a ambos.
Esto es lo que probé hasta ahora que informa con éxito el progreso pero lanza cancelablePromise.cancel is not a function .
import PCancelable from 'p-cancelable'; import PProgress from 'p-progress'; const cancelablePromise = doJobWithProgress(); try { cancelablePromise.onProgress((progress) => { console.log('progress: ' + progress); }); await sleep(500); cancelablePromise.cancel(); const result = await cancelablePromise; console.log("result", result); } catch (error) { console.log("Main catch error: " + error); } function sleep(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } function doJobWithProgress() { return PProgress((progressCallback) => { return new PCancelable((resolve, reject, onCancel) => { try { let progress = 0; const interval = setInterval(() => { progress += 0.1; progressCallback(progress); }, 100); const timeout = setTimeout(() => { const result = 1; clearTimeout(timeout); clearInterval(interval); resolve(result); }, 1000); onCancel(() => { console.log('canceled'); clearTimeout(timeout); clearInterval(interval); }); } catch (error) { console.log('Promise catch error: ' + error); reject(error); } }); }); }