Du musst warten, bis Du das Ergebnis hast. Ansonsten wird tmpObj zurückgegeben, obwohl noch gar nicht alle Eigenschaften abgearbeitet wurden.
So z.B.
async getInitialValues(obj) { let tmpObj = {}; for (var key of Object.keys(obj)) { const value = obj[key]; const stateValue = await this.getForeignStateAsync(value); if (!key.includes("percent")) { tmpObj[key] = recalculate ? this.recalculateValue(stateValue.val) : stateValue.val; } else { tmpObj[key] = stateValue.val; } } return tmpObj; }