javascript - FCF 正在工作,但我收到此警告:避免嵌套承诺 promise/no-nesting
问题描述
我编写了一个 http FCF,它运行两个链接的事务。它有效,但我不知道为什么会收到此警告:
119:16 warning Avoid nesting promises promise/no-nesting
这是我写的函数:
exports.checkeaEstadoFinanciero = functions.https.onRequest((req, res) => {
const body = JSON.parse(req.body);
const RestoID = body.id;
const db = admin.firestore();
const restoRef = db.collection('Restaurantes').doc(RestoID);
const facturasRef = db.collection('Facturas').where('restaurantID', '==', RestoID);
return db.runTransaction(transaction => {
return transaction.get(restoRef).then((restoDoc) => {
if (restoDoc) {
if ((restoDoc.data().cicloFacturacion.termino - Date.now()) < 0) {
//emite una factura
restoRef.set({ httpPropTest: 'worked fine' }, { merge: true });
}
}
return null;
})
.then(() => {
return db.runTransaction(tran => {
return tran.get(facturasRef).then(facturasDoc => {
const holder = [];
facturasDoc.forEach(doc => {
holder.push(doc.data());
})
console.log('facturas documents', holder);
return null;
})
})
})
.catch(err => console.log('error: ', err));
})
})
我从其他用户那里读到了这个帖子:
Google Cloud Functions - 警告避免嵌套承诺承诺/不嵌套
我正在做最被接受的答案建议,但我仍然有这个警告。
我该如何解决这个问题?
解决方案
我的猜测是 ESlint 正在查看您的第二笔交易:
.then(() => {
return db.runTransaction(tran => {
return tran.get(facturasRef).then(facturasDoc => {
const holder = [];
...
})
})
})
并抱怨对then()
另一个then()
回调内部的调用。它不明白事务的嵌入 then() 与第一个并不真正相关。
您可以尝试通过将第二个事务移动到单独的函数来隐藏 ESlint 的这一事实,使其不再出现嵌套:
.then(() => {
return secondTransaction()
})
function secondTransaction() {
return db.runTransaction(tran => {
return tran.get(facturasRef).then(facturasDoc => {
const holder = [];
...
})
})
}
推荐阅读
- python - 如何使用 Numpy 更快地最小化这个距离?(找到两个信号彼此接近的移位索引)
- postgresql - 跨数组的 Postgres 频率计数
- c# - 从 XML c# 中解密签名值
- javascript - JavaScript 中的后缀运算符
- sql-server - T-SQL 语法:'\' 是 t-sql 中的行继续字符吗?
- android - 我的 RecyclerView CardView 没有从 firebase 填充并且应用程序崩溃。我正在使用片段
- reactjs - 使用 React 引导导航栏
- javascript - 使用 vm.runInNewContext 创建类(在 ES6 中强制类表达式而不是类声明)
- plugins - 如果 FetchXML (AGGREGATE SUM) 查询未找到任何内容,EntityCollection 会返回什么?
- django - 更新在 Django 中不起作用