How to return many Promises and wait for them all before doing other stuff

后端 未结 5 1915
北荒
北荒 2020-11-21 23:02

I have a loop which calls a method that does stuff asynchronously. This loop can call the method many times. After this loop, I have another loop that needs to be executed o

5条回答
  •  春和景丽
    2020-11-21 23:17

    Here is code that I wrote for myself in order to understand the answers stated here. I have mongoose queries in a for loop, so I put here the asyncFunction to take its place. Hope it helps anyone. You can run this script in node or any of many Javascript runtimes.

    let asyncFunction = function(value, callback)
    {
            setTimeout(function(){console.log(value); callback();}, 1000);
    }
    
    
    
    // a sample function run without promises
    
    asyncFunction(10,
        function()
        {
            console.log("I'm back 10");
        }
    );
    
    
    //here we use promises
    
    let promisesArray = [];
    
    let p = new Promise(function(resolve)
    {
        asyncFunction(20,
            function()
            {
                console.log("I'm back 20");
                resolve(20);
            }
        );
    });
    
    promisesArray.push(p);
    
    
    for(let i = 30; i < 80; i += 10)
    {
        let p = new Promise(function(resolve)
        {
            asyncFunction(i,
                function()
                {
                    console.log("I'm back " + i);
                    resolve(i);
                }
            );
        });
        promisesArray.push(p);
    }
    
    
    // We use Promise.all to execute code after all promises are done.
    
    Promise.all(promisesArray).then(
        function()
        {
            console.log("all promises resolved!");
        }
    )
    

提交回复
热议问题