一道promise面試題引發的茅塞頓開
阿新 • • 發佈:2019-01-10
今天朋友參加面試,冒死發出面試題,有一道面試題是這樣的
題目:使用promise實現每隔一秒輸出一個1,一共三個
因為朋友在面試,緊張的心裡傳染到了我,使逼出了最強的自己,在還沒有用過promise的我竟然5分鐘寫出來了,而且是十天前根本沒看懂promise。程式碼如下:(比較簡陋)
var p1=new Promise(function (res,rej) { setTimeout(function () { console.log(1) res() },1000) }) var p2=function(){ return new Promise(function (res,rej) { setTimeout(function () { console.log(1) res() },1000) }) } p1.then(p2).then(function () { setTimeout(function () { console.log(1) },1000) })
驚歎之餘,趁熱打鐵,又開始繼續學習promise,呂大豹大哥的文章非常易懂,很順利的看下來
總結一下promise的作用
- 解決回撥地獄,使函式順序執行;
- 使用then,繼續返回一個promise物件可以實現鏈式呼叫,使順序執行的程式碼調理、清晰
- 使用建構函式的方法Promise.all(),該函式傳一個數組,陣列中都是promise物件,等所有的陣列中的所有promise都執行完成後開始執行then方法,比如。所有的函式執行完返回的結果存放到results中,也是陣列的形式,
Promise .all([runAsync1(), runAsync2(), runAsync3()]) .then(function(results){ console.log(results); });
- catch方法是用來執行reject的,會丟擲異常,不會阻塞下面js的執行
- race方法使“競賽”,誰執行的快then方法的回撥函式的引數就是誰,常用於載入超時的情景
上文只是簡單的總結,不懂的地方還得自己多實踐。