function asyncAdd (a, b, callback) {
setTimeout(() => {
callback(null, a + b)
}, 1000)
}
function sumT (a, b) {
return new Promise((resolve, reject) => {
asyncAdd(a, b, (err, res) => {
if(!err) resolve(res)
reject(err)
})
})
}
function sum (...args) {
return new Promise(resolve => {
args.reduce((acc, cur) => acc.then(total => sumT(total, cur)), Promise.resolve(0)).then(resolve)
})
}
async function sum2 (...args) {
if (args.length === 0) return args[0]
const result = []
for (let i = 0; i < args.length - 1; i += 2) {
result.push(sumT(args[i], args[i + 1]))
}
if (args.length % 2) result.push(args[args.length - 1])
return sum(...await Promise.all(result))
}
(async () => {
const s = await sum2(1, 2)
console.log('多数求和:', s)
})()