Я использую плагин для NativeScript и Firebase (nativescript-plugin-firebase), чтобы кодировать серверную часть мобильного приложения, над которым я работаю. У меня есть сценарий, в котором я использую firebase.query, а затем использую его с SingleEvent, установленным в true (поэтому он не прослушивается постоянно).
Проблема, с которой я сталкиваюсь, заключается в попытке получить доступ к ключу одного или нескольких элементов, а также иметь возможность делать такие вещи, как item.name, item.id и т. д. Я могу получить эти данные, если использую "SingleEvent: false" параметр, но не когда для него установлено значение «SingleEvent: true». Я пытался делать сумасшедшие вещи, такие как JSON.stringify to JSON.parse, чтобы создать новый массив JS, но кажется, что я иду по неправильному пути, поскольку должен быть более простой способ (я надеюсь).
Обратный вызов (упрощено для SO):
var onQueryEvent = function (result) {
// note that the query returns 1 match at a time
// in the order specified in the query
if (!result.error) {
//FirebaseService.consoleFlowerBox("Result: " + JSON.stringify(result));
var _items = JSON.stringify(result.value);
var _itemsParse = JSON.parse("[" + _items + "]");
var items = [];
for (let rec of _itemsParse) {
items.push(rec);
}
//
// Use with Single Event Setting
//
var i = 0;
for (let singleItem of items) {
// Get the object Key
var mykey = "";
for (let k in singleItem) {
mykey = k;
}
var _item = JSON.stringify(singleItem
}
Запрос:
firebase.query(
onQueryEvent,
"/" + this.c.nodeC.UPLOAD_ITEMS,
{
// true: runs once, provides all data to onQueryEvent
// false: loops onQueryEvent, row by row, continuous listening
singleEvent: true,
orderBy: {
type: firebase.QueryOrderByType.CHILD,
value: 'UID'
},
range: {
type: firebase.QueryRangeType.EQUAL_TO,
value: BackendService.token
},
}
);
Результат:
[{"-KpGrapjgsM427sd9g7w":{"selected":true,"modifiedDate":"2017-07-17","UID":"cJiaR0jgR2RYUcsp6t7PgKac9ef2","description":"234","status":"Not Uploaded","modifiedByUID":"cJiaR0jgR2RYUcsp6t7PgKac9ef2","name":"Test 3","localFullPath":"/data/user/0/com.customapp.test/files/UploadedMedia/1500317102269.png","count":2,"archived":false,"modifiedTime":"4:18:21 pm"}}]
Когда у меня есть "данные" из singleEvent: true, я хотел бы иметь возможность сделать что-то вроде этого:
(if multiple records)
for (let item of items) {
var x = item.id;
var y = item.name;
}
(if single record)
var x = item.id;
var y = item.name;
Спасибо!