Asynchronous task on every element of an array
From reading it I think it makes more sense to put:

.then(function(result) {
        if (!result) {
          barsDB.push(bar);
        } else {
          bar.goingTonight = result.goingTonight;
        }
      });


Into the promise that is actually executing that code:

function findByIdAsync(bar) {
  return new Promise(function(resolve, reject) {
    setTimeout(function() {
      const result = findById(bar)
      if (result) {
        bar.goingTonight = result.goingTonight;
        resolve("Successfully updated bar")
      } else {
        barsDB.push(bar);
        resolve("Successfully added new bar")
      }
    }, 3000);
  });
}


Then you can just call the array of promises as so:

Promise.all(barsClient.map(findByIdAsync))
  .then(() =&gt; {
    console.log("barsClient:", barsClient);
    console.log("barsDB", barsDB);
  });


It seems that the concerns are more aligned this way.