前端工程师处理数据的能力修炼2

本文介绍了一种封装Promise.all的方法以及如何实现数组的异步循环操作。通过自定义函数proAll和使用Promise.all结合map方法,可以方便地处理多个异步请求,并确保所有请求完成后才继续执行后续逻辑。

//**************************封装promise.all

function api (data, success, fail) {
    setTimeout(function() {
        success(data);
    }, 1000)
}


function getLength(arr) {
    var count = 0;
    arr.forEach(function() {
        count ++;
    });
    return count;
}

function test(data) {
    return new Promise((resolve, reject) => {
        api(data, function(data) {
            data++;
            resolve(data);
        }, function(err) {
            reject(err);
        })
    })
}

function proAll(data) {
    var ret = [];
    return new Promise((resolve, reject) => {
        for (var i=0; i<data.length; i++) {
            (function(index) {
                data[index]
                    .then(function(result) {
                        ret[index] = result;
                        if (getLength(ret)  === data.length) {
                            resolve(ret)
                        }
                    })
                    .catch(reject);
            })(i)
        }
    })
}

proAll([1,2,3,4,5].map(test))
    .then(function(result) {
        console.log(result)
    })




//*********************************************************


//对数组做异步的循环操作

function api(data,success,fail){
    setTimeout(()=> {
        success(data)
    },100)
}

function test(data){
    return new Promise((resolve,reject) => {
        api(data,function(data){
            data++;
            resolve(data);
        },function(err){
            reject(err)
        })
    })
}

Promise.all([1,2,3,4,5].map(test))
            .then(function(result){
                console.log(result)
            })


//**************es7*********************8 */

function sleep(t) {
    return new Promise((resolve, reject) => {
        setTimeout(function () {
            resolve();
        }, t * 1000);
    });
}

(async function test() {
    for (var i = 1; i < 10; i++) {
        await sleep(i);
        console.log(i);
    }
})();


复制代码


转载于:https://juejin.im/post/5aa68e63f265da239147c422

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值