code: async function repeatablePromise (initialAssumptions, assumptionsFromResult, promiseGenerator) {
      let promise = promiseGenerator(initialAssumptions);
      let result = await promise;
      let finalAssumptions = assumptionsFromResult(result);
      if (JSON.stringify(initialAssumptions) === JSON.stringify(finalAssumptions)) {
          return promise;
      } else {
          return promiseGenerator(finalAssumptions);
      }
  }
docs: generate a promise under certain assumptions/choices; then if the result changes the assumptions, repeat the generation with the new information