【问题标题】: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()

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


【解决方案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 秒(尽管由于固有开销可能会稍高一些)。基本上,您正在检查它是否与最长的任务一样快地完成,或者它是否在完成所有任务所需的时间总和之后完成。

    【讨论】:

      猜你喜欢
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      相关资源
      最近更新 更多