Aws lambda异步和同步问题

时间:2017-08-31 10:57:05

标签: node.js asynchronous lambda synchronization amazon-dynamodb

我有一个要求,我需要在表上查询然后遍历结果并查询循环内的另一个表..但我尝试使用 synchronize 节点js模块。但有时api以此方法结束超时错误。现在我以下面的方式尝试我的代码,但没有运气。

[index]

在输出时,此变量(结果[k] [' CafeDetail'])始终为未定义。但是getDetail函数里面的console.log打印结果。

我是节点js的aws lambda的新手..任何帮助将不胜感激。

先谢谢

1 个答案:

答案 0 :(得分:0)

我刚刚解决了我的问题。所以我发布它,可能会帮助其他人面临同样的问题

var notification = {
                    TableName: "Tablename", 
                    KeyConditionExpression:"#userId =:userid",
                    Limit: 12,
                    ScanIndexForward: false,
                    ExpressionAttributeNames: {
                        "#userId": "userId",
                    },
                    ExpressionAttributeValues: {
                        ":userid"    :userId
                    }
                }; 

                docClient.query(notification, function(err, result) {
                    if (err) {
                        context.succeed({success: false, message : JSON.stringify(err, null, 2),method:"notification",type:type});
                    }else{
                        var ret =[];
                        var results =result.Items;
                        if (results.length>0) {
                            results.forEach(function(result, i) {
                                console.log(i);
                                var param = {
                                    TableName: "Tablename",
                                    ProjectionExpression:"CafeName,Cafe_MainImage",
                                    KeyConditionExpression:"CafeID =:cafeID", 
                                    ExpressionAttributeValues: {
                                        ":cafeID"    :result.CafeID
                                    }
                                };

                                docClient.query(param, function(err, CafeDetail) {
                                    if (err) { 
                                        context.succeed({success: false, message : JSON.stringify(err, null, 2),method:"notification",type:type});
                                    } else { 
                                        console.log(CafeDetail.Items);
                                        CafeDetail =CafeDetail.Items; 
                                        result['CafeDetail']=CafeDetail
                                        console.log(result);
                                        if (i === results.length -1) {  // last iteration
                                            context.succeed({success: true,data:results, message : "Notification list",method:"notification",type:type}); 
                                        }
                                    }
                                }); 
                            }); 
                        }else{
                            context.succeed({success: true,data:result, message : "Notification list",method:"notification",type:type}); 
                        } 
                    }
                });