Остановить асинхронный процесс в цикле while NODEJS - PullRequest
0 голосов
/ 06 мая 2019

Как остановить пока цикл в предоставленном коде?Какой код должен быть в состоянии «STOP» для остановки во время цикла?

Когда слушатель дает другой статус , в то время как цикл все еще выполняется. постоянное состояние значения сохраняют «СТАРТ».Оно не меняется, когда слушатель дает новый статус.

constructor(){
    events.on("imdb-scraper-engine", ({status}) =>{
        this.scraper(status);
    });
    this.scraper('INIT');
}

async scraper(status){

while(status == 'START'){
    await axios.get('https://jsonplaceholder.typicode.com/posts').then((result)=>{
        console.log(result);
    });

}

    if((status == 'STOP')){console.log('Process was stopped');}
    if((status == 'INIT')){console.log('Engine Initialized')}

}

- eidt обнаруживает, что я всегда запускаю новый процесс, вызывая this.scraper в конструкторе.Но все еще задаюсь вопросом, как остановить цикл while.

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Исходя из того, чего вы, возможно, пытаетесь достичь, я могу составить для вас идею.

Хотя это может и не сработать.

theLoop; //its a variable

constructor(){
    this.listenEvent();
    this.scraper('INIT');
}
function listenEvent(){
  events.on("imdb-scraper-engine", ({status}) =>{
         if(status=='STOP'){
            clearTimeout(this.theLoop);
         }
         this.scrapper(status);
    });
}
function startWhileLoop() {
   this.theLoop = setTimeout(async function(){ 
       await axios.get('https://jsonplaceholder.typicode.com/posts').then((result)=>{
       console.log(result);
     });
   }, 0);
}

scraper(status){
   while(status == 'START'){
     startWhileLoop();
   }
   if((status == 'STOP')){console.log('Process was stopped');}
   if((status == 'INIT')){console.log('Engine Initialized')}
} 
0 голосов
/ 06 мая 2019
Try it: 


     constructor(){
            events.on("imdb-scraper-engine", ({status}) =>{
                this.scraper(status);
            });
            this.scraper('INIT');
        }

        async scraper(status){
        console.log(status)
        while(status == 'START' && status != 'STOP'){
console.log(status)
            await axios.get('https://jsonplaceholder.typicode.com/posts').then((result)=>{
                console.log(result);
            });

        }

            if((status == 'STOP')){console.log('Process was stopped');}
            if((status == 'INIT')){console.log('Engine Initialized')}

        }
...