Angular 4使用subscribe将来自承诺的数据绑定到可观察到的不起作用

Angular 4使用subscribe将来自承诺的数据绑定到可观察到的不起作用,angular,observable,pouchdb,subscribe,Angular,Observable,Pouchdb,Subscribe,您好,我有一个PockDB服务,它检索一些数据并返回一个承诺。我想把这个承诺转换成一个可观察的,然后在ngOnInit中订阅,这样模型就会得到更新 我用一个返回可观察值的方法实现了一个服务,但它不起作用(数据不会反映在DOM上): 组件HTML: <h1>{{title}}</h1> <ul> <li *ngFor="let platform of platforms"> <a href="#">{{ platform }}

您好,我有一个PockDB服务,它检索一些数据并返回一个承诺。我想把这个承诺转换成一个可观察的,然后在ngOnInit中订阅,这样模型就会得到更新

我用一个返回可观察值的方法实现了一个服务,但它不起作用(数据不会反映在DOM上):

组件HTML:

<h1>{{title}}</h1>
<ul>
  <li *ngFor="let platform of platforms">
    <a href="#">{{ platform }}</a>
  </li>
</ul>
但这种方式就像作弊,因为我在DOM上强制更新

谁能告诉我我做错了什么

import 'rxjs/add/observable/fromPromise';

var subscription = Observable.fromPromise(your promise data);
subscription.subscribe(data => /* Do anything with data received */,
                       error => /* Handle error here */);
更新

   var promise = this.platformsProvider.getPlatforms().then(platforms => {
        return platforms.json();
      });

 return Observable.fromPromise(promise);

您没有正确地将服务注入组件

您需要在构造函数中将注入的服务添加到组件中

别忘了在模块中将服务添加到您的提供者中

摘自

从“/message.service”导入{MessageService};
...
构造函数(私有消息服务:消息服务){}
...
getHeroes():可观察{
//Todo:在抓到英雄后发送消息
this.messageService.add('HeroService:fetched heros');
英雄归来;
}

这里什么是Pocket db builder,您不能直接调用http get,它返回DefualtPockerDBBuilder可观察的值吗?它是一个自定义库,使用Xhr库而不是角度http进行自己的http调用。PlatformsDataProvider也做了同样的操作。我更改了getPlatforms(),所以我返回了Observable.fromPromise,但它也没有在DOM上显示更新的数据,只有在我使用“this.ngZone.run(()=>{this.platforms=platforms;})”,在suscribe之后它才能工作
ngOnInit() {
    this.platformsService.getPlatforms().subscribe(platforms => {
      this.ngZone.run(() => {
        this.platforms = platforms;
      });
    });
  }
import 'rxjs/add/observable/fromPromise';

var subscription = Observable.fromPromise(your promise data);
subscription.subscribe(data => /* Do anything with data received */,
                       error => /* Handle error here */);
   var promise = this.platformsProvider.getPlatforms().then(platforms => {
        return platforms.json();
      });

 return Observable.fromPromise(promise);
import { MessageService } from './message.service';
...
constructor(private messageService: MessageService) { }
...
getHeroes(): Observable<Hero[]> {
  // Todo: send the message _after_ fetching the heroes
  this.messageService.add('HeroService: fetched heroes');
  return of(HEROES);
}