CNode

Promise.all()中怎么传入带不同参数的同一个方法?

问答
Bbackcj发布于9 年前最后回复9 年前19 回复8827 浏览0 收藏
	let promiseFunc = util.promisify(func);
	let params = [1,2,3,4,5];
	let result = await Promise.all([promiseFunc(params[0]), promiseFunc(params[1])]);

类似上面一段代码,如何写一个方法,能直接返回我Promise.all()中需要传入的那些参数,效果如下:

	let promiseFunc = util.promisify(func);
	let params = [1,2,3,4,5];
	let resultINeed = functionINeed(params);
	let result = await Promise.all(resultINeed);
查看回复

回复 (19)

I
im-here#1·9 年前
let params = [1,2,3,4,5];
let tasks = [];
for(let i = 0; i< params.length; i++){
	tasks.push(promiseFunc(params[i]));
}
let result = Promise.all(tasks);
B
backcj#2·9 年前
引用 im-here`

@imhered

把promiseFunc(params[i])添加的数组的时候这个方法会直接执行的

N
nullcc#3·9 年前
let functionUNeed = function(func, params){
	return params.map((param)=>{
		return func.bind(null, param);
	});
};

参数func就是你要传入的promiseFunc

I
im-here#4·9 年前
B
backcj#5·9 年前
引用 nullcc参数func就是你要传入的promiseFunc

@nullcc 我得到的结果是这样的: [ [Function: bound func], [Function: bound func], [Function: bound func], [Function: bound func], [Function: bound func] ]

N
nullcc#6·9 年前

@backcj 然后你把这个函数数组扔进Promise.all()

B
backcj#7·9 年前
引用 nullcc@backcj 然后你把这个函数数组扔进Promise.all()

@nullcc 就是Promise.all()之后返回的结果也是这样的

M
MichealDean#8·9 年前

这种情况,我一般都像二楼那样处理~我才知道添加到数组的时候,这个方法会直接执行啊?

N
nullcc#9·9 年前

或者你试试这个

let functionUNeed = function(func, params){
	return params.map((param)=>{
		return func.call(null, param);
	});
};
M
MichealDean#10·9 年前

问一下题主,是如何测试添加进数组的时候,方法会执行的呢?

I
im-here#11·9 年前
引用 MichealDean这种情况,我一般都像二楼那样处理 我才知道添加到数组的时候,这个方法会直接执行啊?

@XhuiWang 是这样的,添加进去就执行了。Promise.all 相当于只是拿结果而已。 但是我觉得并没有任何影响

I
im-here#12·9 年前
引用 MichealDean问一下题主,是如何测试添加进数组的时候,方法会执行的呢?

@XhuiWang 简单。定义一个返回Promise的函数,函数体内console一下。 然后直接往数组里add,不调用Promise.all。 你可以看到就有log输出

B
backcj#13·9 年前

@XhuiWang @imhered 这个方法之前我试过,可能哪里有地方写错了,就一直以为不行,刚刚试了个简单的,可以用,Thanks

B
backcj#14·9 年前
引用 nullcc或者你试试这个

@nullcc 这个可以,感谢

M
MichealDean#15·9 年前
引用 im-here@XhuiWang 是这样的,添加进去就执行了。Promise.all 相当于只是拿结果而已。 但是我觉得并没有任何影响

@imhered 我每次这么做主要是怕在for循环中await异步请求导致效率很低,这么说来,用Promise.all()会执行两遍,效率是不是也很差?

I
im-here#16·9 年前
引用 MichealDean@imhered 我每次这么做主要是怕在for循环中await异步请求导致效率很低,这么说来,用Promise.all()会执行两遍,效率是不是也很差?

@XhuiWang 当然不会,只会执行一遍的。你可以测试下,只会执行一次 不只是Promise.all,Promise.props 也是add进去就执行了

H
htoooth#18·9 年前
function functionINeed(params) {
	return [promiseFunc(params[0]), promiseFunc(params[1])]
}

C
CRAZYFAKE#19·9 年前

Bluebird Promise.map

参与回复
登录后即可参与回复。登录