[removed] Asynchronous method in while loop

后端 未结 8 2058
一生所求
一生所求 2020-12-15 08:28

I\'m tackling a project that requires me to use JavaScript with an API method call. I\'m a Java programmer who has never done web development before so I\'m having some trou

8条回答
  •  天涯浪人
    2020-12-15 08:49

    If you don't want to use recursion you can change your while loop into a for of loop and use a generator function for maintaining done state. Here's a simple example where the for of loop will wait for the async function until we've had 5 iterations and then done is flipped to true. You should be able to update this concept to set your done variable to true when your webservice calls have buffered all of your data rows.

    let done = false;
    let count = 0;
    const whileGenerator = function* () {
        while (!done) {
            yield count;
        }
    };
    
    const asyncFunction = async function(){
        await new Promise(resolve => { setTimeout(resolve); });
    };
    const main = new Promise(async (resolve)=>{
        for (let i of whileGenerator()){
           console.log(i);
           await asyncFunction();
    
           count++;
           if (count === 5){
               done = true;
           }
        }
        resolve();
    });
    main.then(()=>{
        console.log('all done!');
    });
    

提交回复
热议问题