鍍金池/ 問答/HTML/ 如何讓其請求完再回調(diào)?

如何讓其請求完再回調(diào)?

init()
render()

有兩個方法,這兩個方法必須寫在一起,init和render
init()有個ajax請求,現(xiàn)在想ajax請求回調(diào)完了之后再執(zhí)行render(),render()不能寫在回調(diào)里面
有沒有什么方法?

new Promise(function (resolve, reject) {
        if (me.init()) {
            resolve();
        } else {
            reject();
        }
    }).then(function () {
        me.render();
    }).catch(function () {
        alert('失敗');
    });

我試過這樣寫,init() return個true,可是每次都走到失敗里面
求指導(dǎo),是我哪里寫錯了。。。。

回答
編輯回答
孤客

init()返回一個promise

    function render() {
      console.log(123);
    }
    function init() {
      return new Promise(function(resolve, reject) {
        $.ajax({
          type: 'GET',
          url: '/xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
          success: function(data) {
            resolve({
              data: data
            })
          },
          error: function(err) {
            resolve(err);
          }
        })
      })
    }
    init().then(function(data) {
      render();
    }).catch(function(err) {
      alert(err);
    });
2017年4月15日 16:53
編輯回答
嘟尛嘴

因為你的 init() 里是一個 ajax,本來就是異步執(zhí)行,不會有直接結(jié)果返回,所以

if(me.init()){} // 這步肯定是 false 

應(yīng)該是把 init 里面的 ajax 包裝成一個 promise 返回

2017年12月21日 03:28
編輯回答
空痕
init(render)

function init(cb){
    ...
    cb && cb()//寫在ajax請求回調(diào)里
}
2018年9月21日 16:41