База данных не обновляется на основе значений из API - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь обновить статус для каждого тикета в базе данных, выбрав все тикеты из базы данных и затем передав его в API. API возвращает мне статус, который я хочу обновить для каждого тикета в базе данных. Мой код выглядит нормально для меня, но таблица не обновляется. Я попытался console.log () для ticketNumber , а также info.status.name , они также выводят правильные значения.

ПРИМЕЧАНИЕ. URL-адрес комбинация urlcomeshere / ticketNumber что-то вроде https://api-example.com/BCA-123

connection.query(`SELECT ticket_Number FROM tickets`, function(
  err,
  result,
  fields
) {
  var totalTickets = result.length;
  for (var i = 0; i < totalTickets; i++) {
    ticketNumber = result[i].ticket_Number;
    var infix = "urlcomeshere/";
    infix += ticketNumber;
    var options = {
      method: "GET",
      url: infix,
      auth: {
        username: "username comes here",
        password: "password comes here"
      },
      headers: {
        Accept: "application/json"
      }
    };

    request(options, function(error, response, body) {
      info = JSON.parse(body)["fields"];
      var updateTickets = `UPDATE tickets SET status = "${info.status.name}" WHERE ticket_Number = "${ticketNumber}"`;
      connection.query(updateTickets, function(err, result) {
        console.log("Updated ticket Status");
      });
    });
  }
});

1 Ответ

0 голосов
/ 01 апреля 2020

Поскольку вы вызываете асинхронную c функцию, ваше приложение не будет знать, когда она закончится или выполнится, и поток может быть завершен до того, как ваш запрос будет выполнен.

Ниже примера я попытался отделить функцию запроса и дать ей обещание.

Читать: Обещание

const somefunction = () => {
  connection.query(`SELECT ticket_Number FROM tickets`, function(
    err,
    result,
    fields
  ) {
    var totalTickets = result.length;
    const promises = []
    for (var i = 0; i < totalTickets; i++) {
      ticketNumber = result[i].ticket_Number;
      var infix = "urlcomeshere/";
      infix += ticketNumber;
      var options = {
        method: "GET",
        url: infix,
        auth: {
          username: "username comes here",
          password: "password comes here"
        },
        headers: {
          Accept: "application/json"
        }
      };
      promises.push(updateTicketQuery(options, body, ticketNumber))
    }
    await Promise.all(promises)
  });
}

const updateTicketQuery = (options, body, ticketNumber) => {
  return new Promise((resolve, reject) => {
    request(options, function(error, response, body) {
        coonst info = JSON.parse(body)["fields"];
        var updateTickets = `UPDATE tickets SET status = "${info.status.name}" WHERE ticket_Number = "${ticketNumber}"`;
        connection.query(updateTickets, function(err, result) {
          if(err) {
            reject(err)
          } else {
            console.log("Updated ticket Status");
            resolve(result)
          }
        });
      });
  })
}

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