У меня есть облачная функция (GCP), которая предназначена для агрегирования почасовых данных и записи в Cloud Bigtable, однако, похоже, она возвращается с сообщением: «Выполнение функции заняло 100 мс, завершено со статусом: ок», прежде чем завершить полноекод, последующие строки иногда запускаются, иногда нет.Было бы здорово, если бы у кого-то был опыт и он мог бы посоветовать это, спасибо!
Он работает на моем локальном компьютере, когда я запускаю сценарий, только в облачных функциях, и я не уверен, что вызываетпрекращение кода.Я попытался добавить в блок try / catch, но он также не выдал никаких ошибок.Основные части кода приведены ниже:
const Bigtable = require('@google-cloud/bigtable');
const bigtableOptions = { projectId: process.env.PROJECT_ID };
const bigtable = new Bigtable(bigtableOptions);
const cbt = bigtable.instance(process.env.BIGTABLE_INSTANCE);
const async = require("async");
const moment = require("moment");
require("moment-round");
const bigtableFetchRawDataForDmac = require("./fetchData").bigtableFetchRawDataForDmac;
exports.patchJob = (event, context) => {
const pubsubMsg = Buffer.from(event.data, 'base64').toString();
const jsonMsg = tryParseJSON(pubsubMsg); // msg in format { time: "2018-12-24T02:00:00.000Z", dmac: ["abc", "def", "ghi] }
if(!jsonMsg) return;
else {
if(!jsonMsg.time) {
console.log("Time not provided");
// res.status(400).json({ err: 'TimeNotProvided', msg: `Time parameter is not provided` });
return;
}
let date_range = {};
date_range.lower = moment(jsonMsg.time).toISOString();
date_range.upper = moment(jsonMsg.time).add(1,'hours').subtract(1,"milliseconds").toISOString();
let queryData = [];
let data = {};
for(let i=0; i<jsonMsg.dmac.length; i++){
data[jsonMsg.dmac[i]]=[];
queryData.push(bigtableFetchRawDataForDmac(cbt, jsonMsg.dmac[i], date_range.lower, date_range.upper, data[jsonMsg.dmac[i]]));
}
async.parallel(queryData, function(err, result){
console.log("cookie trail...");
return;
}
}
}
Для bigtableFetchRawDataForDmac он находится в другой папке:
function bigtableFetchRawDataForDmac(cbt, dmac, start, end, data) {
return async function(cb){
const table = cbt.table(process.env.BT_DATA_TABLE);
try { var bigtable = await fetchFromBigtable(table, process.env.BT_DATA_TABLE, dmac, start, end, data, ['push', 'mode', 'val']); }
catch (err) { console.log("bigtableFetchRawDataForDmac failed: ", err); cb(err); }
}
}