Реагируйте на Native Realm итерируйте по объектам - PullRequest
0 голосов
/ 25 января 2019

У меня RTM, я посмотрел на stackoverflow и до сих пор не удается с ограниченной документацией.У меня есть схема установки react native realm с добавленными записями.Он возвращает правильное количество записей, но я не могу получить какие-либо фактические записи из него для повторения.

Я просто пытаюсь получить Lat / Long, а затем поставить на react-native-maps.Что мне не хватает?Моя карта работает нормально, просто не могу получить какие-либо возвращенные записи для координат из БД.

Кажется довольно распространенной проблемой, просто пытаясь перебрать возвращенные записи / объекты

Struct.js

import Utils from '../../helpers/utils'; //GUID gen only

class Struct {
    constructor(name, lat, long, country) {
        this.id = Utils.guid();
        this.name = name;
        this.lat = lat;
        this.long = long;
        this.country = country;
    }
}

module.exports = Struct;

dbService.js

import Realm from 'realm';
import Struct from '../schema/Struct';

let repository = new Realm({

    schema: [{
        name: 'Struct',
        primaryKey: 'id',
        properties: {
            id: {type: 'string', indexed: true},
            name: 'string',
            lat: 'string',
            long : 'string',
            country : 'string',
        }
        }],
        schemaVersion: 1   //<--- needed to add this for any schema change, otherwise migration error occurs.   
});


let dbService = {
    getAll: function() {
        //return repository.objects('Struct');
        return repository.objects('Struct').filtered('country="UK"');
    },
    countAll: function() {
        return repository.objects('Struct').length;
    },

  save: function(Struct) {
    //if one already exists in country, dont add it.
    if (repository.objects('Struct').filtered("country = '" + Struct.country + "'").length) return; //if record exists, exit

    repository.write(() => {
        //Struct.updatedAt = new Date();
      repository.create('Struct', Struct);
    })
  },


};

dbService.save(new Struct('Object 1','xx.xxxxx','xxx.xxxxx','UK'));
dbService.save(new Struct('Object 2','xx.xxxxx','xxx.xxxxx','FR'));
dbService.save(new Struct('Object 3','xx.xxxxx','xxx.xxxxx','DE'));
dbService.save(new Struct('Object 4','xx.xxxxx','xxx.xxxxx','NL'));
dbService.save(new Struct('Object 5','xx.xxxxx','xxx.xxxxx','ES'));

module.exports = dbService ;

Главное приложение

var db = require('./db/db/dbService');
let recCount = db.countAll();
console.log(recCount); //<---- This works correctly

let recs = db.getAll();
for (let rec of recs) {
   console.log(rec); //<----- Never runs
}

console.log() возврата от db.getAll() - это объект, но не в ожидаемом формате, и, похоже, Realm Helper, а не список отфильтрованных объектов, как ожидалось:

Proxy {Symbol(realm): 162, Symbol(id): 177, …}
[[Handler]]: Object
[[Target]]: Results
[[IsRevoked]]: false

Большое спасибо

РЕДАКТИРОВАТЬ

На самом деле .. Я лгу.Функция countAll() возвращала 5 записей, и, комментируя строки dbService.save() до 1, она по-прежнему возвращает 5. Так что что-то здесь не так.

...