谷歌云功能:警告 避免嵌套承诺承诺/不嵌套 +5k 寄存器



我的Firebase应用程序上有以下功能。

但是每次部署它时,我都会收到以下消息:

142:12 警告 避免嵌套承诺承诺/不嵌套

✖ 1 个问题(0 个错误,1 个警告(

exports.cronTravas = functions.database.ref('acoes').onUpdate((change, context) => {
const acoes = change.after.val();
var acoesNovas = [];
var travas = {}
for (var key in acoes) {
var item = {
'key': key,
'ult': acoes[key].ult
}
acoesNovas[key.substring(0, 4)] = item;
}
return admin.database().ref().child('opcoesNew').orderByChild('strike').once('value')
.then((snap) => {
const opcoes = snap.val();
travas['travasAlta'] = {}
for (var data in opcoes) {
travas['travasAlta'][data] = {}
for (var ativo in opcoes[data]) {
travas['travasAlta'][data][ativo] = {}
var i = 0;
for (var opcao in opcoes[data][ativo]) {
i++;
travas['travasAlta'][data][ativo] = calculaTravas(opcoes[data][ativo], acoesNovas[ativo].ult);
}
}
}
return travas;
})
.then(travas => {
return admin.database().ref().update(travas).catch((error) => {
return console.error(error);
});
})
});

也就是说,如何删除此警告?

而且,如果重要的话,此函数会消耗大量配额,在几分钟内生成此消息:

错误:超出配额(函数调用中的 CPU 分配:每 天,函数调用中的 CPU 分配:每天(;以增加 配额,在 xxxxxxx 的项目中启用计费。函数不能 执行。

有没有办法优化它,以便我可以在不吹嘘的情况下使用此免费配额?(我知道我可以升级,但我现在真的在尝试免费计划(。

我的数据库如下所示:

acoes (8)
opcoes
-datas(4)
--acao(8)
---opcao(160)
因此,在我的"opcoes"节点中,我有 4 个"数据"节点,每个节点都有 8 个">

acao"节点,每个节点都有"160"opcao 节点。所以我至少有 5k 个节点,每次更新"acoes"节点时我都必须遍历所有这些节点(即每分钟 1 次(。关于如何改进它的任何想法?

第一个警告应通过对代码进行以下修改来解决:

exports.cronTravas = functions.database.ref('acoes').onUpdate((change, context) => {
const acoes = change.after.val();
var acoesNovas = [];
var travas = {}
for (var key in acoes) {
var item = {
'key': key,
'ult': acoes[key].ult
}
acoesNovas[key.substring(0, 4)] = item;
}
return admin.database().ref().child('opcoesNew').orderByChild('strike').once('value')
.then((snap) => {
const opcoes = snap.val();
travas['travasAlta'] = {}
for (var data in opcoes) {
travas['travasAlta'][data] = {}
for (var ativo in opcoes[data]) {
travas['travasAlta'][data][ativo] = {}
var i = 0;
for (var opcao in opcoes[data][ativo]) {
i++;
travas['travasAlta'][data][ativo] = calculaTravas(opcoes[data][ativo], acoesNovas[ativo].ult);
}
}
}
// return travas;  <- Don't return travas here, as it is not a promise.
// but return the promise returned by the update() method
return admin.database().ref().update(travas);
})
});

对于"超出配额"警报,此 SO 可能会为您提供一些指示:函数已终止。错误:超出配额。请注意,对于初始代码,云函数未正确终止。

最新更新