Облачные функции Google заканчиваются на: тайм-аут при использовании Axios - PullRequest
0 голосов
/ 30 января 2020

Я хочу использовать облачную функцию Google с триггером http для записи данных в электронную таблицу Google.

Следующий код является моей облачной функцией:

exports.writeDataMaterialCollection = functions.https.onRequest(
  (req, res) => {
    if (req.method === "POST") {
      console.log(req.body);
      res.set("Access-Control-Allow-Origin", "*");
      const sheets = google.sheets({ version: "v4" });
      var jwt = getJwt();
      var apiKey = getApiKey();
      var spreadsheetId = "sheetIDxxxxxxxxx";
      var range = "A:L";
      var row = ["data"];
      sheets.spreadsheets.values.append(
        {
          spreadsheetId: spreadsheetId,
          range: range,
          auth: jwt,
          key: apiKey,
          valueInputOption: "RAW",
          resource: { values: [row] }
        },
        (err, result) => {
          if (err) {
            throw err;
          } else {
            console.log(result.data.updates.updatedRange);
            res.status(200).send(result.data.updates.updatedRange);
          }
        }
      );
    }
  }
);

Когда я делаю curl POST-запрос, затем данные записываются в таблицу правильно.

url -d '{"test": "wert"}' -X POST http://localhost:5001/XXXX/writeDataMaterialCollection

Проблема

Чего я не понимаю, так это когда использую Ax ios внутри Vue. js функция облачных вычислений Google возвращает throw new Error («Превышено время ожидания функции»)

axios(
        "http://localhost:5001/XXXXX/writeDataMaterialCollection",
        {
          method: "POST",
          headers: {
            "content-type": "application/json",
            "Access-Control-Allow-Origin": "*"
          },
          data: {
            daten1: 23
          }
        }
      ).then(response => (self.writeDataResult = response));

1 Ответ

1 голос
/ 30 января 2020

Если ваша функция попадает в точку этой строки:

throw err;

Фактически она не завершит функцию и не передаст эту ошибку клиенту. Это потому, что вы выкидываете ошибку из функции обратного вызова, а не из основной функции. Это также означает, что тайм-аут функции истекает, поскольку клиенту не отправляется ответ.

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

if (err) {
  res.send(500);
  console.error(err);
}
...