【发布时间】:2019-12-19 18:49:39
【问题描述】:
我在构建主题和评论系统方面遇到问题。它工作正常,但是在有人发表另一条评论之前,发布的第一条评论永远不会出现,此后所有其他 cmets 都可以正常工作。我曾尝试使用 BehaviourSubject 给出初始值为 null 或 "" 和 ReplaySubject 但我认为我可能会遗漏这些工作方式的某些内容,无论如何要让这项工作实时进行,即当用户推送评论时它会转到服务器并且无需立即提交第二条评论即可重新添加到堆栈中?
import { Injectable } from '@angular/core';
import { Observable } from "rxjs/Observable"
import { BehaviorSubject } from "rxjs/BehaviorSubject"
// import {Subject} from "rxjs/Subject"
import { ServerAPI } from '../serverapi';
import { ReplaySubject } from 'rxjs/internal/ReplaySubject';
import { Subject } from 'rxjs/Subject';
@Injectable({
providedIn: 'root'
})
export class Comments {
private _comments = new Subject<any[]>();
$comments: Observable<any> = this._comments.asObservable();
constructor(private api: ServerAPI) {
this.$comments.subscribe(() => {
console.log('comments sub\'d');
});
}
async comment(threadID: string, commentData: any): Promise<any> {
await this.api.postComment(threadID, commentData);
const fetchComments = await this.api.getComments(threadID);
this._comments.next(fetchComments);
}
}
在我的模板中,我通过订阅 li 收到了 cmets
this.comment.$comments.subscribe(chats => {
this.CommentData = chats;
});
【问题讨论】:
-
您是否确保您的“模板”订阅在第一次发布后完成?如果之前完成,您将永远无法使用 Subject 获得该值。尽管如此,您说使用 BehaviourSubject 不起作用?它应该......你能再测试一下吗?当你订阅一个行为主题时,它总是返回最后一个值,它应该在订阅时发出一些东西。
-
你能添加一个stackblitz吗?
标签: javascript node.js angular typescript rxjs