Javascript 具有角度4和Http观测值的无限轮询
我正试图在我的Http服务中构建一个无限轮询,因为我正在构建一个dashborad之王,他从一个伺服器中调查数据的提交,下面是我的代码,他几乎可以工作(在我的控制台中,我看到Json提交,但它没有反映到我的视图中……我想在我的用户中注入:Observable)Javascript 具有角度4和Http观测值的无限轮询,javascript,angular,long-polling,rxjs5,angular-http,Javascript,Angular,Long Polling,Rxjs5,Angular Http,我正试图在我的Http服务中构建一个无限轮询,因为我正在构建一个dashborad之王,他从一个伺服器中调查数据的提交,下面是我的代码,他几乎可以工作(在我的控制台中,我看到Json提交,但它没有反映到我的视图中……我想在我的用户中注入:Observable) const usersURL = 'http://my.super.servor.php' @Injectable() export class UserService { users: Observable<User[]&g
const usersURL = 'http://my.super.servor.php'
@Injectable()
export class UserService {
users: Observable<User[]>
constructor (public http:Http) {
this.users = http.get(usersURL)
genre mobile ou autre
.map(res => [res.json()]);
let i = this.users.subscribe(
usersURL => console.log(usersURL),
() => {}, // Here we catch up errors
() => console.log("completed!") // Here we catch up if its completed
)
// Here's where I'm trying to do the polling every 5 secondes
let tick$ = Observable.interval(5000);
let response$ =
tick$
.flatMap(() => http.get(usersURL))
.map(res => [res.json()]);
let stockPoller = response$.subscribe(res => console.log(res));
}
constusersurl='1〕http://my.super.servor.php'
@可注射()
导出类用户服务{
用户:可观察
构造函数(公共http:http){
this.users=http.get(usersURL)
类型移动设备
.map(res=>[res.json()]);
让我=this.users.subscribe(
usersURL=>console.log(usersURL),
()=>{},//这里我们来追查错误
()=>console.log(“completed!”)//如果它已完成,我们将在这里进行跟踪
)
//这就是我试图每5秒钟做一次投票的地方
让勾选$=可观察的间隔(5000);
让响应$=
滴答声$
.flatMap(()=>http.get(usersURL))
.map(res=>[res.json()]);
让stockPoller=response$.subscribe(res=>console.log(res));
}
您只需将您的轮询可观察对象分配给此。用户
:
this.users = tick$.flatMap(() => http.get(usersURL)).map(res => [res.json()]);
将您的http调用移动到一个方法中并返回可观察对象。然后将服务注入一个组件,调用新方法并订阅结果。就是这样。现在这项工作真的很好。非常感谢!还有另一个问题,我想您也知道:当我将可观察对象绑定到视图时,我就这样做了,例如:
{{user.data.apps.non_running.non_sensitive.unseen}
。但我在每次查看时都这样做了50次,我的页面开始需要时间加载……你知道如何避免这种问题吗?请查看我在上一篇评论中的问题你在问什么“如果我将50个ui元素绑定到可观察对象,如何使它们共享相同的可观察轮询,而不是启动50个单独的轮询”?只需在.map(…)之后添加.publishReplay(1).refCount()
。这将导致所有绑定的ui元素共享基础轮询。这是因为我的页面现在加载速度非常慢…我将尝试使用计时器
,而不是间隔
。它具有“第一个”计时器和后续定期计时器的参数。