Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 具有角度4和Http观测值的无限轮询_Javascript_Angular_Long Polling_Rxjs5_Angular Http - Fatal编程技术网

Javascript 具有角度4和Http观测值的无限轮询

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

我正试图在我的Http服务中构建一个无限轮询,因为我正在构建一个dashborad之王,他从一个伺服器中调查数据的提交,下面是我的代码,他几乎可以工作(在我的控制台中,我看到Json提交,但它没有反映到我的视图中……我想在我的用户中注入:Observable)

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元素共享基础轮询。这是因为我的页面现在加载速度非常慢…我将尝试使用
计时器
,而不是
间隔
。它具有“第一个”计时器和后续定期计时器的参数。