話說剛換工做一個月有餘,在上家公司乾的實在是不開心,而後就出來抱着試試的心態出來面了幾家公司,大多數公司問的前端問題也就那麼多,其中有個面試問題讓我記憶猶新,只由於沒有答上來,哈哈!前端
當時面試官問我怎麼解決回調函數裏面回調另外一個函數,另外一個函數的參數須要依賴這個回調函數。如:es6
一個回調後面有不少依賴的回調,怎麼解決這個問題?
我說封裝,return 等等啊,但顯然不是面試官想要的解決辦法。回來之後問了一下同事,同事說es6 的Promise 能夠解決啊,只怪我學識尚淺!而後我就查了一下,而後就豁然開朗了。$http.get(url).success(function (res) { if (success != undefined) { success(res); } }).error(function (res) { if (error != undefined) { error(res); } }); function success (data){ if(data.id != 0){ var url = "getdata/data?id="+data.id+""; $http.get(url).success(function (res) { showData(res); }).error(function (res) { if (error != undefined) { error(res); } }); } }
Promise面試
我只把我瞭解的到的記錄下來,你們多多指點!
Promise 構造函數只接收一個函數,這個函數兩個參數:resolve,reject,分別表示異步操做執行成功後的回調函數和異步操做執行失敗後的回調函數。其實能夠理解爲成功和失敗。你也許會說這有什麼用?咱們用的時候有可不僅是 new Promise(function(resolve,reject){}) 就完了,Promise對象上有then、catch這兩個方法,還有不少方法這裏就不一一介紹了!
then接收一個參數,是函數,而且會拿到咱們在new Promise()中調用resolve時傳的的參數。json
functin fun1(){ var a = new Promise(resolve,reject){ resolve(data); } return a ; } fun1().then(function(data){ console.log(data); })
你覺得這就完了?看別人是怎麼用的:
then方法返回的是一個新的Promise實例。所以能夠採用鏈式寫法,即then方法後面再調用另外一個then方法。promise
getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // ... });
上面的代碼使用then方法,依次指定了兩個回調函數。第一個回調函數完成之後,會將返回結果做爲參數,傳入第二個回調函數。異步
採用鏈式的then,能夠指定一組按照次序調用的回調函數。這時,前一個回調函數,有可能返回的仍是一個Promise對象(即有異步操做),這時後一個回調函數,就會等待該Promise對象的狀態發生變化,纔會被調用。函數
到這裏就能夠完美解決回調依賴回調的問題了!post
部分代碼借鑑於:阮一峯es6入門 http://es6.ruanyifeng.com/#docs/promiseui