 <p>You can't force something to be synchronous if it goes outside of the event loop like an ajax call. You're going to need something that looks like this:</p> <pre><code>PlanLineActions.calculateFlightEndDate(periodTypeId, numberOfPeriods, momentTimeUnix) .then(endDate =&gt; { this.theNextSyncFunction(..., ..., ...); }) </code></pre> <p>In order to do this, <code>calculateFlightEndDate</code> will also need to return a promise, and thus it's a good thing that promises are chainable.</p> <pre><code>calculateFlightEndDate(periodTypeId, numberOfPeriods, startDate) { let plan = new Plan(); // return promise! return plan.getFlightEndDate(periodTypeId, numberOfPeriods, startDate).then(response =&gt; { return response.EndDate; // must return here }, error =&gt; { log.debug("There was an error calculating the End Date."); }); } </code></pre> <p>That should do it.. and one more thing: you're doubling up on promises in your server call. If something has <code>.then</code> it's already a promise, so you can just return that directly. no need to wrap in <code>new Promise</code> (a promise in a promise.. no need!)</p> <pre><code>callServer(path, method = "GET", query = {}, data, inject) { // just return! return super.callServer(uri.toString(),method,data,inject).then((data) =&gt; { return data; }).catch((data) =&gt; { if (data.status === 401) { AppActions.doRefresh(); } throw data; // throw instead of reject }); } </code></pre>