如何让JS确保上一个方法执行完毕再执行下一个方法?(纯js,不用jquery

downPdf.onclick = function() {
pageData='pppp';
console.log("进来了");
var infoHtml=document.getElementById("infoHtml");
a();
console.log("pageData-a-after:"+pageData);
b();

}
function a(){
setTimeout(function(){
pageData='pppp-a';
console.log("pageData-a-1000:"+pageData);

}, 1000);

}
function b(){
console.log("pageData-b:"+pageData);
}

console台打印:
进来了

pageData-a-after:pppp
pageData-b:pppp
pageData-a-1000:pppp-a

我想让他执行完a方法之后再进行后续的打印和b方法,而不是像上面那样?

a传入回调,后续代码放回调里面

     downPdf.onclick = function () {
        pageData = 'pppp';
        console.log("进来了");
        var infoHtml = document.getElementById("infoHtml");
        a(function () {////////
            console.log("pageData-a-after:" + pageData);
            b();
        });

    }
    function a(callback) {
        setTimeout(function () {
            pageData = 'pppp-a';
            console.log("pageData-a-1000:" + pageData);
            callback()//////////////
        }, 1000);

    }
    function b() {
        console.log("pageData-b:" + pageData);
    }

ES6 的promise 可以完美解决你的问题