有关promise 如何 实现数组flat,filter 扁平化

本文探讨了Promise.all的实现原理,通过示例展示了如何处理数组中的并行操作。同时,介绍了Promise.retry函数,用于在失败时重试指定次数。此外,还提供了数组扁平化和过滤的方法,如flat()和myFilter(),以及自定义的数组遍历方法myForeach()和myMap()。
摘要由CSDN通过智能技术生成
promise.all 思路 
promise.all =function (arr){
	return new Promise((resolve,reject)=>{
	if(Array.isArray((array)){
	throw new TypeError()
	}
	var length = arr.length;
        var resolveNum = 0;
        var resolveResult = [];
        for (let i=0;i<length;i++){
        	arr[i].then(data =>{
        	resolveNum++;
                resolveResult.push(data)
                if(resolveNum ==length){
                	return resolve(resolveResult)
	       	}
        }).catch(data =>{
        return reject(data)
       })
	}
})
}

`Promise.retry = function(fn, times, delay) {
    return new Promise(function(resolve, reject){
        var error;
        var attempt = function() {
            if (times == 0) {
                reject(error);
            } else {
                fn().then(resolve)
                    .catch(function(e){
                        times--;
                        error = e;
                        setTimeout(function(){attempt()}, delay);
                    });
            }
        };
        attempt();
    });
};``

实现数组flat,filter

// 数组扁平化
toString().split(',')

// 展平一级
function flat(arr){
    var result = [];
    for(var i = 0; i < arr.length; i++){
        if(Array.isArray(arr[i])){
            result = result.concat(flat(arr[i]))
        }else{
            result.push(arr[i]);
        }
    }
    return result;
}
/ 数组过滤
Array.prototype.myFilter = function(fn,context){
    if(typeof fn != 'function'){
        throw new TypeError(`${fn} is not a function`)
    }
    let arr = this;
    let reuslt = []
    for(var i = 0;i < arr.length; i++){
        let temp= fn.call(context,arr[i],i,arr);
        if(temp){
            result.push(arr[i]);
        }
    }
    return result
}
Array.prototype.myForeach = function(fn,context){
    if(typeof fn != 'function'){
        throw new TypeError(`${fn} is not a function`)
    }
    let arr = this;
    for(var i = 0;i < arr.length; i++){
        fn.call(context,arr[i],i,arr);
    }
}

Array.prototype.myMap = function(fn,context){
    if(typeof fn != 'function'){
        throw new TypeError(`${fn} is not a function`)
    }
    let arr = this;
    let reuslt = []
    for(var i = 0;i < arr.length; i++){
        result.push(fn.call(context,arr[i],i,arr));
    }
    return result;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故事只若初见

坚持就是胜利

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值