Ran into this same issue a few days ago and nobody seems to have a solution. So here's my jQuery plugin that seems to provide the same behavior in Boostrap 4.
(function($) {
$.fn.__bs4_btn = $.fn.button;
$.fn.button = function(action) {
if (action === 'loading' && this.data('loading-text')) {
this.data('original-text', this.html()).html(this.data('loading-text')).prop('disabled', true);
}
if (action === 'reset' && this.data('original-text')) {
this.html(this.data('original-text')).prop('disabled', false);
}
return this.__bs4_btn(action);
};
}(jQuery));
More details: How to Continue Using Buttons with “data-loading-text” in Bootstrap 4 with jQuery (my blog)