CalculateStatus does not run immediately after being called
On my asset detail page, I have a mute button (toggle) to "Disable" the asset Thing. When this button is toggled from "OFF" to "ON", it mutes (disables) the asset Thing.

The code for this process is shown below:
try {
if (Things[SerialNumber].MuteStatus === false) {
Things[SerialNumber].MuteStatus = true;
Things[SerialNumber].MuteDate = new Date();
Things[SerialNumber].AssetStatus = 6;
Things[SerialNumber].CalculateStatus();
logger.info(me.name + ": muteAsset: isReporting: " + Things[SerialNumber].isReporting.toString() + " reportingLastChange: " + Things[SerialNumber].reportingLastChange);
logger.info(me.name + ": muteAsset: MuteStatus: " + Things[SerialNumber].MuteStatus.toString() + " AssetStatus: " + Things[SerialNumber].AssetStatus + " status: " + Things[SerialNumber].status + " isEnabled: " + Things[SerialNumber].IsEnabled());
Things[SerialNumber].DisableThing();
logger.info(me.name + ": muteAsset: isReporting: " + Things[SerialNumber].isReporting.toString() + " reportingLastChange: " + Things[SerialNumber].reportingLastChange + " isEnabled: " + Things[SerialNumber].IsEnabled());
}
} catch (err) {
logger.error("muteAsset: " + err.lineNumber + ": " + err);
}
For some reason, DisableThing( ) completes execution before CalculateStatus( ). I need CalculateStatus( ) to complete execution before DisableThing( ), because I need it to change status to "Muted" before it gets disabled. I know DisableThing( ) completes execution before CalculateStatus( ), because I saw in the script log that it tried to run line 7 (CaculateStaus) after the asset Thing was disabled. Please see the screenshot below:
It seems that CalculateStatus( ) executes at least 7 seconds after the muteAsset( ) service was called. How can I get CalculateStatus( ) to execute before DisableThing( )?

