将Firebase云功能与Google BigQuery结合使用时。有时在触发此功能时会随机抛出错误。
这是我们的错误日志:
Error: read ECONNRESET
at exports._errnoException (util.js:1026:11)
at TLSWrap.onread (net.js:569:26)
这是我同事的代码。
const bigQuery = require('@google-cloud/bigquery');
const admin = require('firebase-admin');
const database = admin.database();
exports.updateAllPlaceStatistics = (request, response) => {
const secret = request.query['secret'];
if (secret !== 'secret') {
return response.json({message: 'Request failed!'});
}
const big = bigQuery();
return big.query({
query: [
'SELECT place.id, COUNT(DISTINCT beacon.id) as beacons, COUNT(DISTINCT promotion.id) as promotions, placeUsers.users as users',
'FROM `omega.sw_places` as place',
'LEFT JOIN `omega.sw_promotions` as promotion ON promotion.place_id = place.id',
'LEFT JOIN `omega.sw_beacons` as beacon ON beacon.place_id = place.id',
'LEFT JOIN `omega.view_users_per_place` as placeUsers ON placeUsers.id = place.id',
'GROUP BY place.id, placeUsers.users'
].join(' '),
params: []
}).then((data) => {
const rows = data[0];
let result = {};
for (let index = 0; index < rows.length; index++) {
const item = rows[index];
result[item.id] = {
beacons: item.beacons,
promotions: item.promotions
};
}
return database.ref('statistics/general').set(result);
}).then(() => {
return response.json({message: 'Request succeeded!'});
}).catch((error) => {
console.log('An error has happened to the big_query.js');
console.log(JSON.stringify(error));
return response.json({message: 'Request failed!'});
});
};
出了什么问题?
答案 0 :(得分:1)
尝试从return
中删除return database.ref('statistics/general').set(result);
返回已解决的承诺将结束函数执行。在这种情况下,您的.set()
在BigQuery之前结束,而BigQuery在BigQuery可以执行之前结束该函数。