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);
function functionINeed(params) {
return [promiseFunc(params[0]), promiseFunc(params[1])]
}
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);
把promiseFunc(params[i])添加的数组的时候这个方法会直接执行的
let functionUNeed = function(func, params){
return params.map((param)=>{
return func.bind(null, param);
});
};
参数func
就是你要传入的promiseFunc
@backcj 执行就执行啊,有什么关系呢?
@nullcc 我得到的结果是这样的: [ [Function: bound func], [Function: bound func], [Function: bound func], [Function: bound func], [Function: bound func] ]
@backcj 然后你把这个函数数组扔进Promise.all()
@nullcc 就是Promise.all()之后返回的结果也是这样的
这种情况,我一般都像二楼那样处理~我才知道添加到数组的时候,这个方法会直接执行啊?
或者你试试这个
let functionUNeed = function(func, params){
return params.map((param)=>{
return func.call(null, param);
});
};
问一下题主,是如何测试添加进数组的时候,方法会执行的呢?
@XhuiWang 是这样的,添加进去就执行了。Promise.all 相当于只是拿结果而已。 但是我觉得并没有任何影响
@XhuiWang 简单。定义一个返回Promise的函数,函数体内console一下。 然后直接往数组里add,不调用Promise.all。 你可以看到就有log输出
@nullcc 这个可以,感谢
@imhered 我每次这么做主要是怕在for循环中await异步请求导致效率很低,这么说来,用Promise.all()会执行两遍,效率是不是也很差?
@XhuiWang 当然不会,只会执行一遍的。你可以测试下,只会执行一次 不只是Promise.all,Promise.props 也是add进去就执行了
@imhered 原来是这样,受教了!谢谢
Bluebird Promise.map