js 怎样阻塞父函数执行

function onclick(){

requstHttp();// 耗时的异步执行函数

console.log("等待requstHttp这个异步执行完后,再打印");
}

直接写在在异步的回调不就完了么?

可以使用async、await

使用异步应该是用回调函数来做。

如果一定要用返回值的形式,可以让函数返回一个Promise对象,并且把调用函数的上级函数改成async function异步函数

function GetData(){
    return new Promise(resolve=>{
       $.ajax({
            url: "地址",
            dataType: "json",
            success: function (res) {
                resolve(res);
            }
        });
    });
}

async function asyncCall() {
    console.log('calling');
    var result = await GetData();
    console.log(result);
}

asyncCall();
console.log('next');

要注意的是:async function的语法和结构只是更像标准的同步函数。但不是真正的同步。
实际上在执行到await GetData()这一行时就会跳出asyncCall()函数,立即执行它后面的console.log('next');
能够等待ajax加载的只是await GetData()之后的console.log(result);这与回调方式是一样的。

如果后面的console.log('next')也要等待执行,就要把asyncCall()的上级函数也改成async function

async function asyncCall2() {
    await asyncCall();
    console.log('next');
}