首页 > 解决方案 > JavaScript 不等待承诺解决。使用 Async /Await 扫描 AWS DynamoDB 时

问题描述

我正在使用 Javascipt AWS-SDK 扫描 AWS dynamodb。我希望我的代码能够一直执行,直到它从扫描中获得结果。我做错了什么 。

async function scanDb() {
  var docClient = new AWS.DynamoDB.DocumentClient();
  params = {
    TableName: 'testdriveenvs',
    FilterExpression : 'EnvStatus = :a',
    ExpressionAttributeValues : {':a' : 'Inuse'}
  };

  var objectPromise = await docClient.scan(params).promise().then((data) => {
    return data.Items 
  });

  return objectPromise;
}

var resultDb =  scanDb();
console.log ("Result",resultDb);

预期输出:来自 DynamoDB 的扫描结果。

实际输出: Promise { "pending" } : "pending" ​: PromiseProto { ... }

标签: javascriptasync-awaitamazon-dynamodbaws-sdk

解决方案


scanDb is an async function, so it will necessarily return a promise. All async functions return promises. Either call .then on that promise, or use it in an async function and await its result.

scanDb()
  .then(resultDb => {
    console.log(resultDb);
  });
async function someFunction() {
  const resultDb = await scanDb();
  console.log(resultDb);
}

推荐阅读