【问题标题】:Property 'Update' does not exist on type 'Subscription' -- when trying to update Firebase data“订阅”类型上不存在属性“更新”——尝试更新 Firebase 数据时
【发布时间】:2019-04-12 01:46:51
【问题描述】:

我正在尝试更新 Firebase 数据,但遇到了错误“‘订阅’类型上不存在属性‘更新’。我可以控制台记录该对象,它确实是我想要的对象。我只是不确定如何使用可观察对象上的“订阅”方法更新对象。

import { Injectable } from '@angular/core';
import { Post } from './models/post.model';
import { AngularFireDatabase, FirebaseListObservable } from 'angularfire2/database';

@Injectable()
export class PostService {
  posts: FirebaseListObservable<any[]>;

  constructor(private database: AngularFireDatabase) {
    this.posts = database.list('posts');
  }

  getPosts(){
    return this.posts;
  }

  getPostById(postId: string){
    return this.database.object('posts/' + postId)
  }

  updatePost(localPost){
    var postInFirebase = this.getPostById(localPost.$key).subscribe(dataLastEmittedFromObserver => {
    postInFirebase = dataLastEmittedFromObserver
    console.log(postInFirebase)
    postInFirebase.update({content: localPost.content});
  });
};

  deletePost(localPostToDelete){
    let postInFireBase = this.getPostById(localPostToDelete.$key);
    postInFireBase.remove();
  }

  addPost(newPost: Post){
    this.posts.push(newPost)
  }

}

【问题讨论】:

标签: angular typescript firebase


【解决方案1】:

尝试从订阅行中删除var postInFirebase =,因为Observer.subscribe 在调用异步回调之前同步返回Subscription 对象。这可能会导致 TypeScript 编译器将类型 Subscription 分配给您的变量 postInFirebase 并引发编译错误。

  updatePost(localPost){
    this.getPostById(localPost.$key).subscribe(dataLastEmittedFromObserver => {
      let postInFirebase = dataLastEmittedFromObserver
      console.log(postInFirebase)
      postInFirebase.update({content: localPost.content});
    });
  }

甚至更好

  updatePost(localPost){
    this.getPostById(localPost.$key).subscribe(postInFirebase => {
      postInFirebase.update({content: localPost.content});
    });
  }

您似乎对 Observables 的异步签名感到困惑。当您调用 var value = Observable.subscribe((data) =&gt; { ...}); 时,value 将是订阅而不是观察到的数据,您只能在异步回调中访问可观察到的数据。这让我觉得你的deletePost 方法也行不通。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2018-01-20
    • 2018-12-02
    相关资源
    最近更新 更多