如果需要按顺序执行function，则需要把按顺序执行的方法，都加上return new Promise封装，代码示例如下：
render(parentDomID, tableWidth) {
        return new Promise((resolve, reject) => {
            let html = '<div id=' + this.objID + ' style="padding-left: 1rem;padding-right: 1rem;" class="card">';
            html += '<div class="card-datatable table-responsive mt-4 pl-2 pr-2"  style="padding: 1rem;">'
            html += '<div  class="dataTables_wrapper container-fluid dt-bootstrap4 no-footer">';
            
            document.getElementById(parentDomID).insertAdjacentHTML("beforeEnd", html);
            resolve();
        });
    }
    resolve() 是必要的。


如果方法中有axios的ajax操作，则不用包装promise，直接在axios上加上return
init() {
        let that = this;
        //基础查询数据，应该由query传递，为开发方便，暂时硬编码
        return axios.post(config.getConfigJson().metaUrl, this.code)
            .then(function (response) {
                console.log('到我了')
            })
    }
示例的两个方法，一个有ajax，一个没有，需要先执行ajax，后执行render的话，调用语句如下：
 this.init().then(() => {
                that.renderArea(this.parentDomID, this.tableMinWidth);
            })
那么如果有多个ajax调用需要按顺序执行，虽然比jquery的ajax好一点，但是在只使用promise的情况下，
也是可以实现的，只是类似ajax的调用方式，一样需要嵌套。
比如再加一个ajax的function

refresh() {
    let that = this;
    return this.getContentsFromServer().then(() => {
        document.getElementById(that.eleID).querySelector('thead').innerHTML = that.getTableHeaderHtml();
        document.getElementById(that.eleID).querySelector('tbody').innerHTML = that.getTableBodyHtml();
        document.getElementById(that.eleID + 'pageInfoOfSize').innerHTML = that.getPageInfoHtml();
        document.getElementById(that.eleID + 'pageInfoWithPage').innerHTML = that.getPageDownHtml();
    }).then(() => {
        that.addEventListener.bind(that);
        that.addEventListener();
    });
}

    那么then，then的方式就不行了。错误方式如下：
    this.init().then(() => {
         that.refresh()
    }).then(()=>{
        that.renderArea(this.parentDomID, this.tableMinWidth);
    })
    正确方式如夏：
    this.init()
        .then(() => {
            that.refresh().then(() => {
                that.renderArea(this.parentDomID, this.tableMinWidth);
            })
        })
    这是不是很诡异，但是我摸索了一天，总算实现了多个post操作的按顺序执行，虽然比较抽象。   
    
    主要应用场景：
    1、等待渲染完成，因为所有html都是在js的function里渲染的，所以有时候会发生，在渲染完成之前，元素还
    没有在浏览器中生成，代码就去选中这个元素，导致空指针错误，因为这个元素还不存在。
    但是这个错误不好理解，因为console.log的时候，元素可能已经存在了，但是执行的时候又不存在。
    这是典型的无ajax操作，但是需要按顺序执行的。
    2、ajax操作。

    如果一个函数里调用的函数就是promise的，那么千万不要再包一层promise
    一定要直接返回里面调用的promise

    有效的promise是这么写的
    function a() {
        return new Promise((resolve, reject) => {
            setTimeout(resolve, 2000, 'a')
        })
    }
    function b() {
        return new Promise((resolve, reject) => {
            resolve('b');
        })
    }
    function c() {
        return new Promise((resolve, reject) => {
            setTimeout(resolve, 4000, 'c')
        })
    }
    
    
    a().then(res1=>{
        console.log(res1);
        b().then(res2=>{
            console.log(res2)
            c().then(res3=>{
                console.log(res3)
            })
        })
    })