我写了一个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 - warning Avoid nesting promises promise/no-nesting
我正在做最受欢迎的答案,但我仍然收到此警告。
我该如何解决?
答案 0 :(得分:0)
我的猜测是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 = [];
...
})
})
}