如何在不使用javascript调用的情况下动态设置函数?

如何在不使用javascript调用的情况下动态设置函数?,javascript,function,asynchronous,async-await,Javascript,Function,Asynchronous,Async Await,我有一个函数,它可以同时调用多个函数,并等待它们全部完成。它按预期工作。下面的标签是parallel 我有一个数组,我想把它映射成一个函数,数组中的每个值都有param。但是,正如您所想象的,在映射函数时,函数被正确调用,因此结果不会返回到并行结果。下面是我试图做的一个例子 有没有关于如何做的想法&将结果返回到并行函数 目前正在做 let array = [1,2,3,4,5]; r = await parallel( doStuff(array[0]), doStuff(arr

我有一个函数,它可以同时调用多个函数,并等待它们全部完成。它按预期工作。下面的标签是
parallel

我有一个数组,我想把它映射成一个函数,数组中的每个值都有param。但是,正如您所想象的,在映射函数时,函数被正确调用,因此结果不会返回到并行结果。下面是我试图做的一个例子

有没有关于如何做的想法&将结果返回到并行函数

目前正在做

let array = [1,2,3,4,5];
r = await parallel(
    doStuff(array[0]),
    doStuff(array[1]),
    doStuff(array[2]),
    doStuff(array[3]),
    doStuff(array[4]),
  );
  if(r.err.code) return r;
想做什么

let array = [1,2,3,4,5];

r = await parallel(array.map(v => doStuff(v)))
if(r.err.code) return r;

平行的

async function waitForAll(...functions) {
  return await Promise.all(functions)
}

const parallel = async (...functions) => {
  const d = {err: {code:0,message:""},res:{}}; let r,sql,vars;

  r = await waitForAll(...functions)
  for(let i in r){ if(r[i].err.code) return r[i]; }

  d.res = r;

  return d;
}

module.exports = {
  parallel
}

编辑:
doStuff()
是异步的

因为
并行
接受任意数量的独立参数,所以看起来您所需要做的就是将映射结果传播到调用中。现在只传递一个数组作为第一个参数

const array = [1,2,3,4,5];
const r = await parallel(...array.map(v => doStuff(v)))
if(r.err.code) return r;
或者更改
parallel
的实现以接受数组作为单个参数

const parallel = async (functions) => {

const r = await parallel(array.map(v => doStuff(v)))
除非
doStuff
根据是否定义了第二个或多个参数而具有不同的行为,否则您可以简化为

const r = await parallel(array.map(doStuff))

删除内联调用。

因为
parallel
接受任意数量的独立参数,所以看起来您需要做的就是将映射结果分散到调用中。现在只传递一个数组作为第一个参数

const array = [1,2,3,4,5];
const r = await parallel(...array.map(v => doStuff(v)))
if(r.err.code) return r;
或者更改
parallel
的实现以接受数组作为单个参数

const parallel = async (functions) => {

const r = await parallel(array.map(v => doStuff(v)))
除非
doStuff
根据是否定义了第二个或多个参数而具有不同的行为,否则您可以简化为

const r = await parallel(array.map(doStuff))

正在删除内联调用。

这是
等待并行(
甚至可以工作吗?@brk是。随着当前实现的工作,使用它的项目的其他区域也在工作。这是
等待并行吗(
甚至可以工作?@brk确实可以。由于当前的实现有效,项目的其他领域也在使用它。非常好的洞察力,谢谢。doStuff确实有第二个参数,所以您提供的第一个解决方案非常好。谢谢!非常好的洞察力,谢谢。doStuff确实有第二个参数,所以您提供的第一个解决方案有效很好,谢谢!