let cash = {}
function isUndefined(target){
return target === void 0
}
// 异步加法
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)
console.log(res1)
const res2 = await sum(1, 2, 3, 4, 5, 6, 4)
console.log(res2)
return [res1, res2]
}
total()
// 实现下 sum 函数。注意不能使用加法,在 sum 中借助 asyncAdd 完成加法。尽可能的优化这个方法的时间。
async function sum(...args) {
let key = args.join('+')
if(!isUndefined(cash[key])){
return cash[key]
}
let res = 0
for (let n of args) {
res = await add(n, res)
}
cash[key] = res
return res
}
function add(a, b) {
return new Promise(((resolve, reject) => asyncAdd(a, b, (err, num) => {
if (err) {
return reject(err)
}
resolve(num)
})))
}
console