Так что для тех, кто знаком с 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.