FCF работает, но я получаю это предупреждение: избегайте вложенных обещаний обещание / отсутствие вложений - PullRequest
0 голосов
/ 29 сентября 2018

Я написал 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 - предупреждение Избегать вложенных обещаний обещание / отсутствие вложений

Я делаю то, что предлагает наиболее приемлемый ответ, но у меня все еще есть это предупреждение.

Какя могу решить это?

1 Ответ

0 голосов
/ 29 сентября 2018

Я предполагаю, что 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 = [];
      ...
    })
  })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...