2017-11-06 2 views
-1
const params = { 
    TableName: 'item-table', 
    FilterExpression : "#tagname = :itemId", 
    ExpressionAttributeNames: {"#tagname": "itemId"}, 
    ExpressionAttributeValues: {":itemId": "000001"}  
    }; 
var item =""; 
dynamo.scan(params, function(err, data) 
{ 
if (err) { 
    console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
    item = err; 
    } else { 
     console.log("Query succeeded."); 
     data.Items.forEach(function(item) { 
      item += item.itemName; 
     }); 
     } 
     return item; 
}); 

Der Scan wartet nicht auf die Ausgabe, sondern auf den nächsten Schritt. Wie können wir einen synchronen Aufruf von Lambda zu Dynamob ausführen?Wie kann ich synchrone dynamodb Anfrage in Lambda ausführen?

+0

Warum möchten Sie einen synchronen Anruf? – Kannaiyan

+0

weil aws lex asynchronen Aufruf nicht unterstützt. – Vikash

+2

Fügen Sie in Ihrem 'return item' den Callback hinzu, der zurückgegeben werden soll. Beispiele finden Sie unter http://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html – Kannaiyan

Antwort

0

Sie müssen nicht synchron laufen, was keine gute Idee ist. Sie einen Rückruf von Scan und auch alle anderen Logik an der Stelle Sie den Rückruf erhalten,

const params = { 
 
    TableName: 'item-table', 
 
    FilterExpression : "#tagname = :itemId", 
 
    ExpressionAttributeNames: {"#tagname": "itemId"}, 
 
    ExpressionAttributeValues: {":itemId": "000001"}  
 
    }; 
 
var item =""; 
 
dynamo.scan(params, function(err, data) 
 
{ 
 
    callback(err,data); 
 
});

Zum Beispiel können Sie Code wie unten Refactoring,

scanDynamoDB(function(err,data){ 
 
    if (err) { 
 
     console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
 
     item = err; 
 
     } else { 
 
      console.log("Query succeeded."); 
 
      data.Items.forEach(function(item) { 
 
       item += item.itemName; 
 
      }); 
 
     } 
 
}) 
 

 

 

 
function scanDynamoDB(callback) 
 
{ 
 
    const params = { 
 
     TableName: 'item-table', 
 
     FilterExpression : "#tagname = :itemId", 
 
     ExpressionAttributeNames: {"#tagname": "itemId"}, 
 
     ExpressionAttributeValues: {":itemId": "000001"}  
 
      }; 
 
     var item =""; 
 
     dynamo.scan(params, function(err, data) 
 
     { 
 
      callback(err,data); 
 
     }); 
 
}

+0

dieser Anruf ist immer noch durch die Dynamo.scan-Funktion übergeben und nicht warten auf dynamo.scan zu beenden – Vikash