1. 程式人生 > >一道promise面試題引發的茅塞頓開

一道promise面試題引發的茅塞頓開

今天朋友參加面試,冒死發出面試題,有一道面試題是這樣的

題目:使用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方法的回撥函式的引數就是誰,常用於載入超時的情景

上文只是簡單的總結,不懂的地方還得自己多實踐。