Запрос к базе данных Firebase, возвращающий TypeError: obj.hasOwnProperty не является функцией - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь сделать запрос к моей базе данных Firebase, выполняющей следующий код:

const lastCrawl = admin
  .database()
  .ref('/crawls')
  .orderByChild("dateAdded")
  .limitToLast(1)
  .once('value')
  .then((snapshot) => {
    return snapshot.val();
  });

Я написал это на основе документов и просто добавил несколько дополнительных шагов доставить только последнюю запись в целевой каталог. Однако даже жесткое кодирование одной записи из каталога (например, '/crawls/RECORD-ID') вызовет ту же ошибку, что странно, поскольку код в основном такой же, как в документации.

В настоящее время возвращается следующая ошибка:

Unhandled rejection

TypeError: obj.hasOwnProperty is not a function
    at each (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:553:17)
    at validateFirebaseData (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:1511:9)
    at /srv/node_modules/@firebase/database/dist/index.node.cjs.js:1528:13
    at each (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:554:13)
    at validateFirebaseData (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:1511:9)
    at /srv/node_modules/@firebase/database/dist/index.node.cjs.js:1528:13
    at each (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:554:13)
    at validateFirebaseData (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:1511:9)
    at /srv/node_modules/@firebase/database/dist/index.node.cjs.js:1528:13
    at each (/srv/node_modules/@firebase/database/dist/index.node.cjs.js:554:13)

1 Ответ

0 голосов
/ 14 апреля 2020

Как прокомментировал Фрэнк, есть фундаментальная проблема, я пытался return от обратного вызова, который не будет работать, поскольку он вызывается асинхронно.

Я решил решить, как вернуть обещание как сделано ниже:

const getLastCrawl = async () => {
    const ref = admin.database().ref('/crawls/')
    return ref.orderByChild("dateAdded")
      .limitToLast(1)
      .once('value')
      .then((snapshot) => {
        return snapshot.val();
      });
}

const lastCrawl = await getLastCrawl()

Большое спасибо за помощь, Фрэнк!

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