您的位置:首页 > 大数据 > 人工智能

用async-await实现类似Promise.all()的执行效果

2018-02-06 11:04 761 查看

使用函数:

awaitAll(fn1, fn2, fn3...)


async function awaitAll(...fnArr) {
if ({}.toString.call(fnArr[0]) === '[object Array]') {
fnArr = fnArr[0];
}
const fnNum = fnArr.length;
const promiseArr = [];
const resultArr = [];
for (let i = 0; i < fnNum; i++) {
promiseArr.push(fnArr[i]());
}
for (let i = 0; i < fnNum; i++) {
resultArr.push(await promiseArr[i])
}
return resultArr;
}


测试:

function wait(ms) {return new Promise(resolve => setTimeout(() => resolve(), ms));}

async function fn1() {
await wait(1000);
console.log('fn1');
await wait(1000);
return 'fn1';
}

async function fn2() {
await wait(3000);
console.log('fn2');
return 'fn2';
}

async function fn3() {
console.log('fn3');
await wait(2000);
return 'fn3';
}

function fn4() {
console.log('fn4');
return 'fn4';
}

awaitAll(fn1, fn2, fn3, fn4).then(results => {
console.log(results);
});
// 在3秒后,返回结果列表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: