// 緩存斐波那契數據 並取第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的執行返回值會傳遞下去