緩存斐波那契數據與隊列執行promise

// 緩存斐波那契數據 並取第n個
function
cacheFb() { let pn = null let arr = [] let [per, cur] = [0, 1] return function(n) { if(pn && pn >= n) { console.log('取緩存的數據') return arr[n - 1] } else { console.log('取從pn開始到n的數據',[per, cur], pn, n) for(let i=pn; i<n; i++) { [per, cur] = [cur, per + cur] arr.push(cur) } pn = n; return arr[arr.length - 1] } } } let getFb = cacheFb() console.log(getFb(6))

利用閉包持久緩存參數

2.使用隊列順序執行promise

// 生成長度爲10的隨機數組
let parr_ = []
~function(i) {
    if(i < 10) {
        let curI = i
        parr_.push(
            new Promise((res, rej) => {
                setTimeout(() => {
                    res(curI)
                }, 1000)
            })
        )
        i++;
        arguments.callee(i)
    }
}(0)

// 定義隊列
function queue(arr) {
    let res = []
    let seq = Promise.resolve()
    arr.forEach(item => {
        seq = seq.then(res => item).then(data => {
            res.push(data)
            return res
        })
    })
    return seq
}

queue(parr_).then(res => {
    console.log('res:', res)
})

then返回一個全新promise,then的執行返回值會傳遞下去

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章