Ошибка ESLint в примере кода для удаления коллекций из облачного хранилища пожаров - PullRequest
0 голосов
/ 07 июня 2018

В функции 'deleteQueryBatch' в документации firebase ,

exports.batchDelete = function deleteQueryBatch(db, query, batchSize, resolve, reject) 
{
  query.get()
      .then((snapshot) => {
        // When there are no documents left, we are done
        if (snapshot.size == 0) {
          return 0;
        }

    // Delete documents in a batch
    var batch = db.batch();
    snapshot.docs.forEach((doc) => {
      batch.delete(doc.ref);
    });

    return batch.commit().then(() => {
      return snapshot.size;
    });
  }).then((numDeleted) => {
    if (numDeleted === 0) {
      resolve();
      return;
    }

    // Recurse on the next process tick, to avoid
    // exploding the stack.
    process.nextTick(() => {
      deleteQueryBatch(db, query, batchSize, resolve, reject);
    });
  })
  .catch(reject);
}

я вижу следующие ошибки и предупреждения ESLint.

Expected '===' and instead saw '=='. (eqeqeq)
Avoid nesting promises. (promise/no-nesting)
Each then() should return a value or throw (promise/always-return)

Я получилизбавиться от первой ошибки, заменив указанный оператор, однако я не уверен, как решить две другие.

1 Ответ

0 голосов
/ 10 июня 2018

Немного информации перед устранением ошибок:

  1. Избегайте вложенных обещаний.(обещание / отсутствие вложения) Документация

    Это можно исправить путем объединения обещаний вместо вызова одного внутри другого.

  2. Каждый затем() должен вернуть значение или бросить (обещание / всегда возвращение) Документация

    Это немного сложнее, но оно заставляет ваше обещание всегда возвращать что-то

Ответ:

function deleteSelectedDocuments(db, snapshot) {
    var deferred= new Promise();
    if (snapshot.size == 0) {
        deferred.resolve(snapshot);
    }

    // Delete documents in a batch
    var batch = db.batch();
    snapshot.docs.forEach((doc) => {
        batch.delete(doc.ref);
    });

  batch.commit()
      .then(() => deferred.resolve(snapshot))
      .catch(() => deferred.reject());

  return deferred;
}

exports.batchDelete = function deleteQueryBatch(db, query, batchSize, resolve, reject) {
    query.get()
        .then((snapshot) => deleteSelectedDocuments(db, snapshot))
        .then((snapshot) => {
            // Solving rule error 1: Set numDeleted from the returned value of batch.commit.
            var numDeleted = snapshot.size;
            if (numDeleted === 0) {
                // Solving rule error 2: Return the resolve method (which resolves the upper promise?)
                return resolve();
            }

            process.nextTick(() => {
                deleteQueryBatch(db, query, batchSize, resolve, reject);
            });
            // Solving rule error 2: Return the resolve method (which resolves the upper promise?)
            return resolve();
        })
        .catch(reject);
}

Если одно или оба правила не подходят для вашего кода, вы можете просто отключить их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...