function asyncAdd(a, b, cb) {
setTimeout(() => {
cb(null, a + b)
}, Math.random() * 1000)
}
async function total() {
const res1 = await sum(1, 2, 3, 4, 5, 6, 4)
const res2 = await sum(1, 2, 3, 4, 5, 6, 4)
console.log(19,[res1,res2])
return [res1, res2]
}
console.time()
let cash = new Map()
total()
console.timeEnd()
async function sum(...args) {
console.log(31,cash , cash.has(args))
let key = args.join(',')
if(cash.has(key)){
console.log(22,args)
return cash.get(args)
}else{
let res = 0
for(let n of args){
res = await caculate(res,n)
}
cash.set(key,res)
console.log(42,args, res)
return res
}
}
function caculate (num1,num2){
return new Promise ((resolve,reject) =>{
asyncAdd(num1,num2,(err,res) =>{
if(err){
reject(err)
return
}
resolve(res)
})
})
}