Это потому что, когда вы извлекаете данные из Firebase, вызов является асинхронным. Что вы можете сделать:
Вариант 1 - Установите логику внутри закрытия (например, что у вас есть, напечатайте var внутри закрытия).
Вариант 2 - Определите свое закрытие, которое получая ваши данные, такие как:
func myMethod(success:([String])->Void){
ref?.observeEventType(.Value, withBlock: { snapshot in
var newNames: [String] = []
for item in snapshot.children {
if let item = item as? FIRDataSnapshot {
let postDict = item.value as! [String: String]
newNames.append(postDict["name"]!)
}
}
success(newNames)
})
}
Вариант 3 - Использовать шаблон делегата
protocol MyDelegate{
func didFetchData(data:[String])
}
class MyController : UIViewController, MyDelegate{
func myMethod(success:([String])->Void){
ref?.observeEventType(.Value, withBlock: { snapshot in
var newNames: [String] = []
for item in snapshot.children {
if let item = item as? FIRDataSnapshot {
let postDict = item.value as! [String: String]
newNames.append(postDict["name"]!)
}
}
self.didFetchData(newNames)
})
}
func didFetchData(data:[String]){
//Do what you want
}
}
Пополнение Mongo-документов через базы данных добавлено с mongoose v3.9.0
. За это через db populate test вы должны указать другое имя db, когда вызывается model
. Некоторые примеры кода, как показано ниже. Более подробную информацию см. В тестовых кодах в ссылке.
var app_DB = mongoose.createConnection(APP_DB_URI);
var name_DB = app_DB.useDb(config.NAME_DB); // 'name_db'
// ...
module.exports = app_DB.model('Account', schema);
// ...
module.exports = name_DB.model('Name', schema);
Начать
.populate('name', '', Name)
.populate()
после этого?.populate('name')
теперь работает. – CENT1PEDE 23 February 2016 в 10:06.populate('name', '', Name)
первым является ссылочным ключом, я не понимаю, что такое второй параметр, поэтому я просто оставляю его' '
, тогда 3-я ссылочная модель – CENT1PEDE 23 February 2016 в 10:16[select] <Object, String> Field selection for the population query
– zangw 23 February 2016 в 10:17