Я взял Руководство по Angular Heroes и пытаюсь реализовать службу pouchdb для обслуживания данных. Я сделал резервную копию оригинального сервиса героев, который предоставил множество героев с разными атрибутами. Теперь я пытаюсь изменить службу для локального извлечения документов из pouchdb. Я изменил класс HeroService и настроил некоторые параметры в конструкторе.
import { Injectable, EventEmitter } from '@angular/core';
import {Hero} from './hero';
import {HEROES} from './mock-heroes';
import { Observable, of } from 'rxjs';
import {MessageService} from './message.service';
import PouchDB from 'pouchdb';
@Injectable({
providedIn: 'root'
})
export class HeroService {
private isInstantiated: boolean;
private database: any;
private listener: EventEmitter<any> = new EventEmitter();
constructor(private messageService:MessageService) {
if (!this.isInstantiated) {
this.database = new PouchDB("http://server:5984/db1");
this.isInstantiated = true;
}
}
getHeroes(): Observable<Hero[]> {
console.info(this.database.allDocs({include_docs: true}))
return of(this.database.allDocs({include_docs: true}));
this.messageService.add("HeroService: fetched heroes");
};
Console.log показывает «ZoneAwarePromise» в файле hero.service.ts в строке console.info, но содержит массив данных и документов, которые я хочу показать на экране. Правильно ли я подхожу к этому, используя службу для передачи данных из PouchDB в приложение Angular?
Компонент, в котором я пытаюсь показать эти данные, - это файл "dashboard.components.ts", а вот новая функция:
getHeroes(): void {
console.info(this.heroes)
console.info(this.heroService.getHeroes());
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
//console.info(this)
}
Есть ли лучший подход к этому?





Возможно, вы упускаете два самых крутых преимущества Pouch ... сначала офлайн и фоновый живые обновления.
Чтобы получить первое, вы должны создать две базы данных: одну удаленную, а другую - локально для браузера. Затем вы настраиваете репликацию между ними. После первого запуска, вообще без подключения к сети, ваша страница будет работать так же, как если бы она была подключена к сети. Запись и чтение в локальную БД будут мгновенными. При подключении к сети Pouch прозрачно синхронизирует все локальные и удаленные данные. эта статья может помочь вам начать с этого (хотя вы можете игнорировать материал о Phoenix; вы можете напрямую подключиться к CouchDB).
Если вы также используете живая находка, данные на экране обновятся в течение нескольких секунд, чтобы показать пользователю изменения на стороне сервера, без какого-либо дополнительного специального программирования с вашей стороны.
Наконец, я предлагаю вам оценить Couchbase (со шлюзом репликации) вместо CouchDB, он кажется восходящей звездой, в то время как CouchDB, похоже, теряет популярность.