JSFiddle - React, Tailwind, and code Playground

JavaScript

function doM(gen) {
  function step(value) {
    var result = gen.next(value);
    if (result.done) {
      return result.value;
    }
    return result.value.then(step);
  }
  return step();
}

var db = {
  collection: {
    find: function(query) {
      return new Promise(function(resolve) {
        setTimeout(function() {
          resolve([1, 2, 3, 4, 5]);
        }, 1000);
      });
    }
  }
};

function* queryDB(query) {
  var rows = yield db.collection.find(query);
  
  var sum = 0;
  
  for (var x of rows) {
    sum += x;
  }

  return sum;
}

var sumPromise = doM(queryDB('query example'));

sumPromise.then(console.log.bind(console));