我正在编写一个Cloud Function,它从.csv文件读取几行并为每行发送一个HTTP请求,但是我遇到了上面的错误。
此错误已被问过(here,here和here列出了一些错误),但是在所有这些情况下,问题是该函数未返回一个只能在每次异步操作后才能解决的承诺。
据我对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)时错误开始出现。 “完成”。该消息也未出现在日志中,因此该功能似乎没有达到终点。
有任何线索吗?
答案 0 :(得分:0)
我在项目中遇到了同样的错误。 我通过将运行时从node8降级到node6来解决了