0

私はテーブル上でクエリを実行し、ループ内の別のテーブルをクエリする必要があります。しかし、私はノードjsモジュールを同期しようとしました。しかし、いつかapiはこのメソッドでタイムアウトエラーで終了します。今私は下の方法でコードを試していますが、運はありません。awsラムダ非同期と同期の問題

var notification = { 
TableName: "Tablename", 
KeyConditionExpression:"#userId =:userid and #datetime <=:datetime", 
ScanIndexForward: false, 
ExpressionAttributeNames: { 
    "#userId": "userId", 
    "#datetime":"datetime" 
}, 
ExpressionAttributeValues: { 
    ":userid" :userId, 
    ":datetime" :datetime 
} 
}; 

docClient.query(notification, function(err, result) { 

if (err) { 
    context.succeed({success: false, message : JSON.stringify(err, null, 2),method:"notification",type:type}); 
}else{ 

    result = result.Items; 

    if (result.length>0) { 
     for(var i=0;i<result.length;i++){ 
      result[k]['CafeDetail']=getDetail(result[k].CafeID,function (data) { 

      }); 

      if (k ==(result.length -1)) { 
       context.succeed({success: true,data:result, message : "Notification list",method:"notification",type:type}); 
      } 

     } 
    } 

} 

}); 

function getDetail(CafeID,callback) { 
    var param = { 
     TableName: "Tablename", 
     ProjectionExpression:"CafeName,Cafe_MainImage", 
     KeyConditionExpression:"CafeID =:cafeID", 
     ExpressionAttributeValues: { 
      ":cafeID" :CafeID 
     } 
    }; 

    docClient.query(param, function(err, CafeDetail) { 
     if (err) { 
      console.log (err) 
      callback(err); 
     } else { 
      callback(CafeDetail.Items); 
      console.log(CafeDetail.Items); 
     } 
    }); 
} 

出力時に、この変数(result [k] ['CafeDetail'])は常に未定義となります。しかし、getDetail関数内のconsole.logは結果を出力します。

私はノードjsでawsラムダに初心者です。どんな助けもありがとうございます。

ありがとうございました

答えて

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}); 
         } 
        } 
       });