【问题标题】:how to use node js to combine data from two jsons如何使用node js合并来自两个jsons的数据
【发布时间】:2017-12-06 10:28:13
【问题描述】:

我想合并两个表中的数据,然后将结果作为响应发送。

我是 nodejs 和 lambda 的新手,我无法弄清楚如何合并来自两个扫描调用的 json 数据并将其作为响应发送。

如果我取消注释回调,则只发送一个表的响应。

我的代码如下,有人可以帮忙完成吗

'use strict';
const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB();
const docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = function(event, ctx, callback) {

var params=  {
       TableName:'x',
       FilterExpression:'SessionId = :SessionId',
ExpressionAttributeValues:{ ":SessionId" : 'ca47a131'},
};


var params1=  {
    TableName:'y',
    FilterExpression:'sessionid = :SessionId',
    ExpressionAttributeValues:{ ":SessionId" : 'ca47a131'},
};

docClient.scan(params, onScan);
docClient.scan(params1, onScan1);

function onScan(err, data){
    if(err){
        callback(err, null);
    }else{

        //callback(null, data);
   }
}
function onScan1(err, data){
    if(err){
        callback(err, null);
    }else{

        //callback(null, data);
   }
}

}

【问题讨论】:

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


    【解决方案1】:

    您可以对代码进行以下修改,以便可以在单个回调中发送响应。

    'use strict';
    const AWS = require("aws-sdk");
    const dynamodb = new AWS.DynamoDB();
    const docClient = new AWS.DynamoDB.DocumentClient();
    
    exports.handler = function(event, ctx, callback) {
    
    var params=  {
           TableName:'x',
           FilterExpression:'SessionId = :SessionId',
    ExpressionAttributeValues:{ ":SessionId" : 'ca47a131'},
    };
    
    var params1=  {
        TableName:'y',
        FilterExpression:'sessionid = :SessionId',
        ExpressionAttributeValues:{ ":SessionId" : 'ca47a131'},
    };
    
    docClient.scan(params, onScan);
    docClient.scan(params1, onScan1);
    
    var firstResultData = false;
    function runAfterBothCallbacks(data){
      if(!firstResultData){
         firstResultData = data;
      }else{
         // Combine firstResultData with data and return in the callback
         callback(null,{ dataX: firstResultData, dataY: data });
         // Note: The order of scan and scan1 result coming cannot be guaranteed so, dataX can be the results of scan or scan1. If you can identify the result based on the scan, either pass it as another parameter to the runAfterBothCallbacks method or identify the scan based on data result (If possible).
      } 
    
    }
    
    function onScan(err, data){
        if(err){
            callback(err, null);
        }else{
            runAfterBothCallbacks(data);
       }
    }
    function onScan1(err, data){
        if(err){
            callback(err, null);
        }else{
            runAfterBothCallbacks(data);
       }
    }
    
    }
    

    【讨论】:

      【解决方案2】:

      欢迎使用 JavaScript 异步回调(又名 callback hell)。

      幸运的是,AWS SDK supports promises 所以你可以使用Promise.all() 来等待多个承诺得到解决。发生这种情况时,合并 JSON 结果并通过 Lambda 函数的 callback() 方法返回合并后的结果。

      【讨论】:

        猜你喜欢
        • 2016-04-07
        • 1970-01-01
        • 2022-11-23
        • 2021-11-04
        • 2017-08-15
        • 2018-07-01
        • 2017-09-11
        • 2010-12-25
        • 1970-01-01
        相关资源
        最近更新 更多