Как читать только один дочерний ключ / значение в Firebase? [Дубликат]

В то время как обещания и обратные вызовы хорошо работают во многих ситуациях, боль в задней части выражает нечто вроде:

if (!name) {
  name = async1();
}
async2(name);

. В итоге вы пройдете через async1; проверьте, не определено ли name или нет, и соответственно вызовите обратный вызов.

async1(name, callback) {
  if (name)
    callback(name)
  else {
    doSomething(callback)
  }
}

async1(name, async2)

Хотя в в порядке хорошо , это раздражает, когда у вас много подобных случаев и обработка ошибок.

Fibers помогает в решении проблемы.

var Fiber = require('fibers')

function async1(container) {
  var current = Fiber.current
  var result
  doSomething(function(name) {
    result = name
    fiber.run()
  })
  Fiber.yield()
  return result
}

Fiber(function() {
  var name
  if (!name) {
    name = async1()
  }
  async2(name)
  // Make any number of async calls from here
}

Вы можете проверить проект здесь .

5
задан Nippysaurus 4 November 2014 в 11:59
поделиться

2 ответа

неа. API-интерфейс Firebase Web / JavaScript API всегда возвращает полное дерево в соответствии с запрошенными вами узлами.

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

Notes
    1: { "body": "hello", "title": "yessir" }
    2: { "body": "again", "title": "title2" }
    3: { "body": "there", "title": "another" }
Notes_index
    1: true
    2: true
    3: true

Это обычно называют индексом. Вы on('child_added' на Notes_index, а затем (при необходимости) получите содержимое каждой ноты с помощью once('value'.

Индексы также часто используются, чтобы сделать узлы доступными альтернативным ключом. Например, индекс заголовка для вышеперечисленного:

Title_index
    "another": 3
    "title2": 2
    "yessir": 1

Эта последняя структура может не понадобиться больше, поскольку Firebase расширяет свой API запросов, чтобы разрешить упорядочивание / фильтрацию в любом поле. Но для вашего прецедента индекс по-прежнему полезен.

3
ответ дан Frank van Puffelen 31 August 2018 в 16:40
поделиться

Абсолютно, когда вы устанавливаете значения заголовка или тела для заметки, обязательно установите приоритет . Затем вы можете привязать к конечной точке нот (получать события и данные), ограниченную ключами, соответствующими указанному приоритету .

0
ответ дан Nippysaurus 31 August 2018 в 16:40
поделиться