如何判断我的 promise.all 是不是并行运行?
Posted
技术标签:
【中文标题】如何判断我的 promise.all 是不是并行运行?【英文标题】:How can I tell if my promise.all is running in parallel?如何判断我的 promise.all 是否并行运行? 【发布时间】:2019-01-25 08:45:03 【问题描述】:我有以下Promise.all
示例。我想知道它是否与lambda.invoke
“并行”运行?我如何测试某些东西是否并行运行?
引用了这个thread
function get1(id)
return new Promise((resolve, reject) =>
const params =
FunctionName: 'myLambda', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
Payload: id ,
;
lambda.invoke(params, (err, data) =>
if (err)
reject(new Error('error'));
else
const result = JSON.parse(data.Payload);
resolve(result);
);
).catch(e => Promise.resolve( error: 'Error has occurred.' ));
exports.getDetails = list => Promise.all(list.map(get1))
.then((response) =>
return result;
).catch((error) =>
console.log('oops ', error);
);
【问题讨论】:
AWS SDK 可以为您返回一个承诺。只需lambda.invoke(params).promise()
。
【参考方案1】:
你可以数出有多少动作已经开始但还没有完成:
let running = 0;
// Inside of the promise:
running++;
lambda.invoke(params, (err, data) =>
running--;
console.log(`lambda.invoked finished, $running tasks still running`);
);
如果invoke
是同步的,你会得到:
lambda.invoked finished, 0 tasks still running
lambda.invoked finished, 0 tasks still running
lambda.invoked finished, 0 tasks still running
如果是异步的,你会得到:
lambda.invoked finished, 2 tasks still running
lambda.invoked finished, 1 tasks still running
lambda.invoked finished, 0 tasks still running
【讨论】:
【参考方案2】:一种测试方法是确定调用需要多长时间,以及完成 Promise.all 需要多长时间。如果任务是按顺序执行的,并且每次调用大约需要 1 秒,那么一个包含 5 个元素的列表应该需要大约 5 秒才能完成。但是,如果它们并行运行,它们应该需要接近 1 秒(尽管由于固有开销可能会稍高一些)。基本上,您正在检查它是否与最长的任务一样快地完成,或者它是否在完成所有任务所需的时间总和之后完成。
【讨论】:
以上是关于如何判断我的 promise.all 是不是并行运行?的主要内容,如果未能解决你的问题,请参考以下文章