單例模式,promise與async/await

weixin_34214500發表於2017-11-25
  1. 複習了apply ,argument以及閉包在單例模式中的應用
    閉包在其中充當了儲存器的作用,用來判斷有無例項
  2. promise物件的後代還是promise,成功resolve,失敗reject,呼叫成功then,失敗則是catch
    配合async/await簡直了。實現對回撥資料的等待、(非同步中的同步實現)
    async/await中的await使用的順序很重要(因為實現同步),要想實現非同步操作後同步計算輸出,可以使用以下程式碼
    async function add1(x) {
        var a = resolveAfter2Seconds(20)
        var b = resolveAfter2Seconds(20)
        return x + await a + await b
    }

    add1(10).then(v => {
        console.log(v)  //  2秒後輸出50
    })

    async function add2(x) {
        var a = await resolveAfter2Seconds(20)
        var b = await resolveAfter2Seconds(30)
        return x + a + b
    }

    add2(10).then(v => {
        console.log(v)  // 4秒後輸出60
    })

    async function add3(x) {
        let result = await Promise.all([resolveAfter2Seconds(30),resolveAfter2Seconds(30)]) // 
        return result.reduce((a,b)=>a+b)+x
    }
    add3(10).then(v => {
        console.log(v)  // 2秒後輸出70
    })

add1中直接計算然後在將結果進行await相加,實現先非同步獲取結果,同步輸出;和add3使用的Promise.all方法一樣(每個promise都先進行非同步操作,後等到結果都成功後一起輸出)

相關文章