Ошибка: функция вышла из области действия запроса. Функция прервана. - PullRequest
0 голосов
/ 10 января 2019

Я пишу облачную функцию, которая читает несколько строк из CSV-файла и отправляет один HTTP-запрос для каждой строки, но я получаю сообщение об ошибке выше.

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

Из моего понимания того, как работает async, мой код, похоже, не имеет этой проблемы. Вот суть этого, удалив некоторые конкретные детали:

    const request = require('request-promise-native');
    const storage = require('@google-cloud/storage')();

    exports.sendData = async (data, context) => {
      const [file] = await storage.bucket(data.bucket).file(data.name).download();
      const [header, ...table]  = file.toString('utf8').split('\n').map(row => row.split(','));
      const rows = table.map(
        row => header.reduce((obj, col, i) => {
          obj[col] = row[i];
          return obj;
        }, {})
      );

      const paramList = rows.map(({csv_field1, csv_field2}) => ({
        req_field1: csv_field1,
        req_field2: csv_field2,
        // etc.
      }));

      let errors = 0;
      console.log(`Sending ${paramList.length} rows...`);
      await Promise.all(paramList.map(async (param, i) => {
        try {
          await request.get({url: "", qs : param}); // Endpoint removed
          if ((i + 1) % 10000 == 0) {
            console.log(`${i+1} rows ${paramList.length} sent.`);
          }
        } catch (e) {
          console.log(`Request failed for row ${i+1} .\n\n${e}`);
          errors++;
        }
      }));
      console.log(`Done.`);
      if (errors > 0) {
        console.log(`Total errors: ${errors}`);
      }
    };

Приведенный выше код прекрасно работает для пары строк (10), но ошибка начинает появляться при попытке увеличить число (1000). «Готово». сообщение также не появилось в журналах, поэтому не похоже, что функция подходит к концу.

Есть какие-нибудь подсказки?

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