Have you tried deferred operation with getTotalsAction or totals-processor?
It's showing ajax process in your cart after calcul
you can use thisit like this (i minimize your code, just to show you how to use these functions.) :
require(["jquery", "Magento_Customer/js/customer-data","jquery/jquery-storageapi","Magento_Checkout/js/model/cart/totals-processor/default","Magento_Checkout/js/model/cart/cache","Magento_Checkout/js/model/quote","Magento_Checkout/js/action/get-totals"], function ($,defaultTotal,cartCache,quote,getTotalsAction) { $(document).on("submit","form#form-validate", function (e) { e.preventDefault(); $.ajax({ url: form.attr("action"), data: form.serialize(), type: "post", success: function (res) { var deferred = $.Deferred(); // this show ajax loader and reload price in cart getTotalsAction([], deferred); // this one too defaultTotal.estimateTotals(); }, error: function () { console.log("error"); } }); console.log("form submitted"); });}); I suggest you to show this post for updating price in cart : How to add fee to order totals in Magento 2 and this one : https://github.com/sivajik34/Custom-Fee-Magento2