2017-06-06 120 views
1

长轮询我有如下的使用情况:如何实现HTTP在角2

  • 用户选择的视频被上传到自己的个人资料。
  • Angular向node.js服务器发送请求,该请求返回Amazon S3预先签名的URL。
  • 浏览器'直接'将文件上传到S3。
  • Elastictranscoder开始转码视频。
  • AWS-SNS遵循https端点来通知node.js转码完成的后端。

如何反映这个事实,视频现在在Angular方面可用?

我正在做类似于下面的事情,它工作正常,但我不确定是否正确处理了错误情况?我应该做更多的事情吗?

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')); 
} 

这只是一个普通的http请求,唯一的区别是服务器没有立即返回响应。

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

+0

我使用SignalR为 –

+0

你为什么不干脆用socket.io?长期投票是笨拙的。 –

+0

@VolodymyrBilyachat,我使用node.js – kmansoor

回答

0

这是我落得这样做:

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(); 
} 
+2

这实际上是LP吗?它看起来正常http请求给我。你如何做到这样http请求保持打开所需的时间,并听取更改? –