Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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 如何在Angular 2中实现http长轮询_Javascript_Node.js_Angular_Http - Fatal编程技术网

Javascript 如何在Angular 2中实现http长轮询

Javascript 如何在Angular 2中实现http长轮询,javascript,node.js,angular,http,Javascript,Node.js,Angular,Http,我有一个用例,如下所示: 用户选择要上载到其个人资料的视频 Angular向node.js服务器发送请求,该服务器返回一个Amazon S3预签名URL 浏览器“直接”将文件上载到S3 Elastictranscoder开始对视频进行转码 AWS-SNS遵循https端点,通知node.js后端代码转换完成 如何反映这一事实,即视频现在可以在角度方面 我正在做类似于下面的事情,它工作得很好,但我不太确定是否正确处理了错误案例?我还需要做些什么吗 startLp(): Observable&

我有一个用例,如下所示:

  • 用户选择要上载到其个人资料的视频
  • Angular向node.js服务器发送请求,该服务器返回一个Amazon S3预签名URL
  • 浏览器“直接”将文件上载到S3
  • Elastictranscoder开始对视频进行转码
  • AWS-SNS遵循https端点,通知node.js后端代码转换完成
如何反映这一事实,即视频现在可以在角度方面

我正在做类似于下面的事情,它工作得很好,但我不太确定是否正确处理了错误案例?我还需要做些什么吗

 startLp(): Observable<any> {
   return this.http
     .get("/getvideostatus?video-id=blah", { headers: this.headers })
     .map(res => {
       return res.json();
     })
     .catch((error: any) => Observable.throw(error.json().error || 'Server error'));
}
startp():可观察{
返回此文件。http
.get(“/getvideostatus?video id=blah”,{headers:this.headers})
.map(res=>{
返回res.json();
})
.catch((error:any)=>Observable.throw(error.json().error | |“服务器错误”);
}
这只是一个常规http请求,唯一的区别是服务器没有立即返回响应


这是否构成有效的http长轮询

这就是我最后要做的:

public startLp(): Observable<any> {
let that = this;
let doLp = function(): Observable<any> {
  return that.http
    .get("/getvideostatus?video-id=blah", { headers: that.headers })
    .map(res => {
      return res.json().data
    })
    .catch((error: any) => {                    
      return doLp();
    });
};

return doLp();
}
public startp():可观察{
让那=这;
设doLp=function():可观察{
返回该文件。http
.get(“/getvideostatus?video id=blah”,{headers:that.headers})
.map(res=>{
返回res.json().data
})
.catch((错误:any)=>{
返回doLp();
});
};
返回doLp();
}

这就是我最后要做的:

public startLp(): Observable<any> {
let that = this;
let doLp = function(): Observable<any> {
  return that.http
    .get("/getvideostatus?video-id=blah", { headers: that.headers })
    .map(res => {
      return res.json().data
    })
    .catch((error: any) => {                    
      return doLp();
    });
};

return doLp();
}
public startp():可观察{
让那=这;
设doLp=function():可观察{
返回该文件。http
.get(“/getvideostatus?video id=blah”,{headers:that.headers})
.map(res=>{
返回res.json().data
})
.catch((错误:any)=>{
返回doLp();
});
};
返回doLp();
}

我正在使用信号器,为什么不直接使用socket.io呢?长轮询很笨拙。@VolodymyrBilyachat,我使用的是node.jsI,我使用的是signar,为什么不直接使用socket.io呢?长轮询很笨拙。@VolodymyrBilyachat,我使用的是node.js,这真的是LP吗?在我看来,这是正常的http请求。如何使http请求在所需的时间内保持打开状态并侦听更改?这实际上是LP吗?在我看来,这是正常的http请求。如何使http请求在所需的时间内保持打开状态并侦听更改?