He estado buscando una respuesta durante bastante tiempo y lo mejor que he hecho hasta ahora es muy ineficiente y estoy seguro de que hay una solución más simple para esto.
Actualmente tengo una clase que está tratando de hacer una determinada tarea para recuperar una salida, para esperar esa salida, uso Promise resolve/reject.
class Example { start() { return new Promise(async (resolve, reject)) { var step_1 = await this.function1(); var step_2 = await this.function2(step_2); var step_3 = await this.function3(step_3); resolve(await this.function4(step_3); } } } module.exports = Example;
Supongamos que la función 1-4 existe y realiza una determinada tarea que tarda un tiempo en realizarse. Luego creamos varias de estas instancias:
const Example = require("./Example.js"); for (let i = 0; i < 10; i++) { const example = new Example(); example.start(); }
Entonces, esto toma de segundos a minutos para devolver una salida, pero mi problema actualmente es cómo matarlos a todos a la mitad de la resolución.
Mi primer enfoque fue simplemente rechazar o resolver una salida en un setInterval que verifica si el código se eliminó o no, pero eso no parece funcionar debido a 1 de 2 problemas:
start()
, simplemente continuará con el código. const { isKilling } = require("./main.js"); // isKilling() returns either true or false class Example { start() { return new Promise(async (resolve, reject)) { var interval = setInterval(function() { if (isKilling()) return resolve("KILLED"); // or reject("KILLED"); // The instance of this class still continues. }, 1); var step_1 = await this.function1(); var step_2 = await this.function2(step_2); var step_3 = await this.function3(step_3); resolve(await this.function4(step_3); } } } module.exports = Example;
Por cómo lo resolví de manera muy ineficiente, hice lo de setInterval pero luego agregué un fragmento de código que verifica si la clase ha sido eliminada y simplemente regresa en casi todas las líneas (lo sé, es malo)
¡Así que espero que si alguien aquí puede ayudarme! ¡Gracias de antemano!