Node.js - Как продолжать описывать запросы журнала Cloudwatch для статуса «Завершено» определенного запроса - PullRequest
0 голосов
/ 01 мая 2019

Так что для тех, кто знаком с CW Logs ... это не типичный вызов запроса БД, который возвращается с результатами. Вы отправляете вызов API для запуска запроса, который возвращает идентификатор запроса. Затем вы отправляете другой вызов API, чтобы получить результаты запроса, с «надеждой», что запрос завершен, а если нет, вам не повезло. Вот где я сейчас нахожусь.

У меня есть запрос, который занимает немного времени, и я «угадываю», что способ справиться с этим состоит в том, чтобы продолжать зацикливать вызов DescribeQueries до тех пор, пока я не найду совпадение среди этого возвращенного массива завершенных запросов, а затем продолжить с остальной код. Я не могу это осуществить! Grrrr !!

Я пробовал «Пока» и «Делай». Циклы, которые полностью НЕ работают. Я попытался установить значение условия перехода, когда совпадение найдено ... но оно никогда не устанавливается, и функция Lambda отключается.

function checkQueryStatus (logGroup, qID, callback) {

      var params = {
      logGroupName: logGroup, 
      maxResults: '3',
      status: 'Complete'
    };

let found = 0;

      do {
      cwlogs.describeQueries(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else {
          // console.log(data.queries);           // successful response
            const qList = data.queries;
            if (qList.some(query => query.queryId === qID)) {  
              console.log('Query Done');
              callback(1);
              found = 1;
          } else {
            console.log('Query not done');
          }
        }
      });
      } while (found == 0); 
}

checkQueryStatus(logGroupName, queryID, function(qStatus) {
  console.log('Query Status: ', qStatus);

  if (qStatus == 1) { 
  console.log('Query Done');

  <do other code...>


Как я могу это сделать? Я сейчас смотрю в Обещания, чтобы увидеть, что это все о .. Если DescribeQueries находит совпадение, я хочу вызвать API-вызов GetQueryResults.

1 Ответ

0 голосов
/ 02 мая 2019

Я столкнулся с подобной проблемой с AWS Athena.Когда я запускаю запрос, я получаю ответ, который был запущен, но не получаю уведомления о его завершении.Лучшее решение, которое я придумал, состояло в том, чтобы использовать setTimeout, чтобы проверять его состояние каждые 100 мс или около того и продолжать, когда запрос завершен.Надеюсь, это поможет.

...