Promise.all 传入同一个方法不同参数的封装

直接贴代码

应用场景 比如你需要同时发起多页请求,需要传入页码但是方法都是一样的此时我们就可以进行封装一下,很实用的一个技巧

let tasks = [];
for (let i = 1; i <= 5; i++) {
    tasks.push(i);
};
/*
* @params : func:你封装的方法 params: 参数的数组
*/
let getDataBind = (func, params) => {
        return params.map( item => {
            return func.call(null, item) //传参
        })
    }
 /*
 @params : page_no 页码  
 getDate 可以换成你自己需要重复操作的方法,同理
 */
let getData = (page_no) => {
        let saveListData = JSON.parse(localStorage.getItem(this.props.saveListData));
        let params = {
            page_no:page_no,
            ...saveListData.loadParams
        }
        return new Promise(resolve => {
            get(this.props.sortUrl, params, this, false).then(function (data) {
                resolve(data.result;);
            });
        })
    }  
 Promise.all(this.getDataBind(this.getData, arrPage))
	.then( resultArr  => {
		    resultArr = resultArr.flat();//拉平数组
		    console.log(resultArr)    //这里就获取到所有页的数据了
	});
//

有什么疑问下面评论区留言我会及时回复的

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Promise.all是JavaScript中的一个方法,用于将多个Promise对象封装成一个新的Promise对象。它接受一个Promise对象数组作为参数,返回一个新的Promise对象。当所有Promise对象都成功时,新的Promise对象也会成功,并返回所有Promise对象的返回值组成的数组。如果有任意一个Promise对象失败,新的Promise对象也会失败,并返回第一个失败的Promise对象的错误信息。 示例: ``` Promise.all([promise1, promise2, promise3]) .then((values) => { console.log(values); }) .catch((error) => { console.log(error); }); ``` ### 回答2: 对于这个问题,我将提供一个300字的回答来介绍如何封装一个 Promise.all函数。 Promise.all是一个用于处理多个 Promise 对象的静态方法,它接受一个 Promise 对象数组作为参数,并返回一个新的 Promise 对象。当传入Promise 对象数组中的所有 Promise 对象都变为 resolved 状态时,这个新的 Promise 对象才会被 resolve,并传递一个包含所有 resolved 值的数组。如果传入Promise 对象数组中有任一一个 Promise 对象被 reject,则新的 Promise 对象将被 reject,并传递第一个 reject 值。 要封装一个 Promise.all函数,我们可以创建一个新的 Promise 对象,并在其中进行相关的处理逻辑。首先,我们需要判断传入参数是否为一个 Promise 对象数组,如果不是,则直接返回一个被 reject 的 Promise 对象,并传递一个对应的错误信息。 接下来,我们可以使用一个计数器来统计所有 Promise 对象的 resolved 状态。我们可以使用一个变量来保存所有 resolved 值,并在每个 Promise 对象 resolve 时将其添加到这个变量里。同时,在任何一个 Promise 对象被 reject 时,我们需要立即 reject 整个新的 Promise 对象,并传递对应的 reject 值。 最后,当所有 Promise 对象都变为 resolved 状态时,我们可以 resolve 新的 Promise 对象,并传递保存的所有 resolved 值。 总结起来,封装一个 Promise.all函数需要进行参数验证、计数器和变量的初始化、处理每个 Promise 对象的 resolved 和 reject 状态,并最终返回一个新的 Promise 对象。这个过程可以通过创建一个匿名函数,使用上述逻辑来实现。这样我们就能够使用封装好的 Promise.all函数来处理多个 Promise 对象的结果了。 ### 回答3: Promise.all 是 JavaScript 中的一个方法,它接收一个 Promise 数组作为参数,并在所有 Promise 都完成时返回一个新的 Promise 对象。 如果要封装一个 Promise.all 方法,可以采用以下的方式: ```javascript function myPromiseAll(promises) { return new Promise((resolve, reject) => { let results = []; let counter = 0; if (promises.length === 0) { resolve(results); } else { for (let i = 0; i < promises.length; i++) { promises[i].then((result) => { results[i] = result; counter++; if (counter === promises.length) { resolve(results); } }).catch((error) => { reject(error); }); } } }); } ``` 这个方法首先创建一个新的 Promise 对象,并接收一个 promises 数组作为参数。然后创建一个空数组来存储每个 Promise 的结果,以及一个计数器来跟踪已完成的 Promise 数量。 接下来,判断传入promises 数组是否为空。如果为空,直接使用 resolve 返回空数组。 如果 promises 数组不为空,循环遍历数组中的每个 Promise 对象。当每个 Promise 对象都调用了 then 方法时,将该 Promise 的结果存储到 results 数组的对应位置中,并增加计数器的值。当计数器的值等于 promises 数组的长度时,说明所有 Promise 已经完成,此时使用 resolve 返回结果数组。 如果其中任意一个 Promise 出现错误,则使用 catch 方法将错误传递给新的 Promise 对象,并使用 reject 返回错误。 这样,我们就成功封装了一个 Promise.all 方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值