如何在不使用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确实有第二个参数,所以您提供的第一个解决方案有效很好,谢谢!