Promisify循环AWS lamda函数的节点函数

时间:2018-04-10 03:34:13

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

我想创建一个循环AWS lambda函数的promise节点函数,但我看不出蓝鸟承诺怎么可能。 你有这个实现的例子吗?

var lambda = new AWS.Lambda();
 const lambdaInvokeAsync = Promise.promisify(lambda.invoke, {context: 
 lambda});
 for(var page = 1; page <= totalPages; page++){

  var params = {
    FunctionName: MOCK_API_FUNCTION /* required */,
    Payload: '{"page":'+page+', "limit": '+limit+', "retrievalDate":'
              +retrievalDate+ '}';
  };

   return lambdaInvokeAsync(params)
    .then((result) => {
      console.log('Successfully retrieve data');
      var dataPerPage = JSON.parse(result.Payload).data;
      dataArr.push(dataPerPage); 

      return dataArr;
    });

}

1 个答案:

答案 0 :(得分:0)

aws-sdk支持自v2.3.0以来的承诺。

您可以使用lambda.invoke(params).promise()返回承诺。

这样,您的代码就变成......

const lambda = new AWS.Lambda();

const invokes = [];

for (let page = 1; page <= totalPages; page++) {
  const request = lambda.invoke({
    FunctionName: MOCK_API_FUNCTION /* required */ ,
    Payload: '{"page":' + page + ', "limit": ' + limit + ', "retrievalDate":' +
      retrievalDate + '}';
    }).promise();

  invokes.push(request);
}

const dataArr = Promise.all(invokes)
  .map(result => JSON.parse(result.Payload).data)