Я пишу облачную функцию, которая считывает несколько строк из файла .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.info(`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.info(`${i + 1} rows ${paramList.length} sent.`);
}
} catch (e) {
console.info(`Request failed for row ${i + 1} .\n\n${e}`);
errors++;
}
}));
console.info(`Done.`);
if (errors > 0) {
console.info(`Total errors: ${errors}`);
}
};
Приведенный выше код отлично работает для пары строк (10), но ошибка начинает появляться при попытке с большими числами (1000). "Готово". сообщение также не появилось в журналах, поэтому не похоже, что функция подошла к концу.
Какие-нибудь подсказки?
У меня точно такие же симптомы, но в довольно большом проекте, который я действительно не хотел переписывать для Node 6 ... Он отлично работает до тех пор, пока количество исходящих HTTP-запросов не достигнет нескольких сотен, а затем начнется сбой с эта полезная ошибка.
похоже на ту же проблему, что и у меня ... есть идеи?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У меня была такая же ошибка в моем проекте. Я решил это, понизив время выполнения с node8 до node6
Переписал код для использования обещаний и попробовал среду выполнения Node.js 6, и она сработала. Не уверен, что с кодом что-то не так или проблема связана со средой выполнения Node.js 8.