I'm having trouble with getting arrays to work as when I do a console.log statement after the function, I get an empty array... I know it has to do with the asynchronous nature of JS, but I can't figure out how to fix it. I tried using Promises but I still get an empty array in the console.log statement. Similarly, the total variable stays equal to 0 even though it should increment.
Any tips/suggestions? Thanks.
Here's my code:
let total = 0;
 let collections = [];
                    return Promise.all(courts.map(court => {
                      return new Promise((resolve, reject) => {
                        return Promise.all(court.users.map(async user => {
                          let tempPromise = new Promise((resolve, reject) => { 
                              setTimeout(() => {
                                  resolve();
                              }, 5000);
                          });
                                      return SignDetail.find({
                                        userName: user.userName,
                                        signStatus: "signIn",
                                      }).then(function(sign) { 
                                        if (user.userName.endsWith('zs')) { 
                                            let signCount = 0;
                                            if (sign.length > 1) {
                                                for (let j = 0; j < sign.length; j++) {
                                                    let courtObj = {courtName: sign[j].userName}; //make court object
                                                    signCount++; //increment each time there's a signature
                                                    if (j === sign.length - 1) { //only push object in array when all signatures have been counted
                                                        courtObj.signCount = signCount;
                                                        collections.push(courtObj);
                                                    } 
                                                }
                                            } 
                                        } //end here
                                      }); 
                          return tempPromise;
                        })).then(_ => resolve(collections));
                      })
                    })).then(collections => {
                      // HERE you will your collection and you can use this promise where this function is being called. 
                      console.log(collections);
                    });
    test() //call async function
    courts.forEach(court => { // count amount of signatures for only zs courts
        for (let i = 0; i < court.users.length; i++) {
              SignDetail.countDocuments({userName: court.users[i].userName}, 
            function(err, count) {
              if (count > 0) total = count;
                    });
                } 
              });
              console.log(total) // output should be greater than 0, but console outputs 0
              console.log(collections); //outputs []
  }
