I am trying to disable the button until the code is successfully executed. Unfortunately, the button is activated too early, the function is still running. How can I prevent this?
$("#myButton").click(function() {
    $(this).prop("disabled", true)
    doSomethingFunction()
    $(this).prop("disabled", false)
});
Edit: Thank you all for your help. I have adjusted my code. Can you do it this way or are there better ways?
class TestClass
{
    static doSomethingFunction() {
        return new Promise(function (resolve, reject) {
            setTimeout(function () { console.log("function is done");  resolve(self);  }, 5000);
        })
    }
}
$("#myButton").click(function() {
    $(this).prop("disabled", true)
    TestClass.doSomethingFunction().then(r => $(this).prop("disabled", false))
});
The second solution does not work for me, because "completely done" is output before "function is done"
class TestClass
{
    static doSomethingFunction(callback) {
        setTimeout(function () { console.log("function is done");}, 2000);
        if(callback !== undefined){
            callback();
        }
    }
}
$("#myButton").click(function() {
    $(this).prop("disabled", true)
    TestClass.doSomethingFunction(function(){
        console.log("completely done")
    });
});
What am I doing wrong?
 
    