FCF正在工作,但我收到此警告:避免嵌套promises promise / no-nesting

时间:2018-09-29 15:23:58

标签: javascript google-cloud-functions eslint

我写了一个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

我正在做最受欢迎的答案,但我仍然收到此警告。

我该如何解决?

1 个答案:

答案 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 = [];
      ...
    })
  })
}