JavaScript не ждет обещания решить.При использовании Async / Await для сканирования AWS DynamoDB - PullRequest
0 голосов
/ 05 мая 2019

Я использую 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"} : "в ожидании" : PromiseProto {…}

Ответы [ 2 ]

2 голосов
/ 05 мая 2019

scanDb - это асинхронная функция, поэтому она обязательно вернет обещание. Все асинхронные функции возвращают обещания. Либо вызовите .then для этого обещания, либо используйте его в асинхронной функции и дождитесь его результата.

scanDb()
  .then(resultDb => {
    console.log(resultDb);
  });
async function someFunction() {
  const resultDb = await scanDb();
  console.log(resultDb);
}
0 голосов
/ 06 мая 2019

Await работает только внутри асинхронной функции, поэтому он будет содержать код после await, который находится внутри асинхронной функции. Я пытался получить значение функции scanDb () вне async. По этой причине мой код не ждал.

Большое спасибо Николаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...