我如何知道我的promise.all是否并行运行?

时间:2018-08-18 15:26:32

标签: javascript node.js amazon-web-services aws-lambda

我有以下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);
    });

2 个答案:

答案 0 :(得分:4)

您可以算出已开始但尚未完成的操作数:

join

如果 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

答案 1 :(得分:1)

一种测试方法是确定呼叫应花费多长时间以及Promise.all完成需要多长时间。如果任务是串行执行的,并且每个调用大约需要1秒钟,则包含5个元素的列表将需要大约5秒钟才能完成。但是,如果它们并行运行,则它们应花费约1秒的时间(尽管由于固有的开销可能会稍高一些)。基本上,您要检查它是否完成与最长的任务一样快,或者是否在完成所有任务所花费的时间之后完成。