У меня есть общий источник событий.
var events = require('events');
var eventEmitter = new events.EventEmitter();
который генерирует такие события, как пауза, возобновление, отмена.
Я слушаю эти события в своей функции. но эта функция вызывается внутри для цикла.
let func = () =>{
//some Action runs async;
eventEmitter.on("pause",()=>{
//some action;
});
eventEmitter.on("resume",()=>{
//some action;
})
eventEmitter.on("cancel",()=>{
//some action;
})
return 0;
}
for(let i=0;i<anyNumber;i++){
func();
}
РЕДАКТИРОВАТЬ: Моя реальная цель состоит в том, чтобы рекурсивно читать файлы в каталоге и загружать в s3 Bucket, так как нет никакого официального метода для загрузки всего каталога, я достиг через это.
Упомянутый выше цикл for на самом деле является fs.readdir, для простоты я упомянул его как цикл.
в func () у меня есть функция загрузки s3 (многочастная загрузка), пока нажата кнопка паузы, мне нужно приостановить загрузку (что означает, что загрузка текущей части уже завершена, и остановка загрузки другой части).
пока возобновление означает, что загрузка части продолжается, тогда как отмена означает, что я отменяю загрузку части.
Это мой точный случай.
const readdirp = require('readdirp');
readdirp('.', {fileFilter: '*.js', alwaysStat: true})
.on('data', (entry) => {
const {path, stats: {size}} = entry;
s3Fileupload(path)
})
.on('warn', error => console.error('non-fatal error', error))
.on('error', error => console.error('fatal error', error))
.on('end', () => console.log('done'));
теперь вы можете мне помочь?
РЕДАКТИРОВАТЬ: 1
let func = () =>{
let stream = es.map((data, next) => {
queue.defer(function(details, done) {
_this.s3MultiUpload(JSON.parse(details), options, done, details, next);
}, data);
}); }
let stream = readdirp(path)
stream.pipe(this.func());
может быть d3Queue, который я использую здесь, может вызвать утечку памяти, я нажимаю на функцию полностью при чтении каталога?