【发布时间】:2018-04-17 11:33:06
【问题描述】:
我有一个需要很长时间才能响应的后端 api 调用。大概10分钟吧。但是,它确实通过信号器发布进度更新。将信号器位放在一边,我需要一种方法来发布 http 帖子,但不等待响应。开火然后忘记。
为了对此进行扩展,我在 ngrx 效果中调用 api。拨打电话后,我想启动我的减速器将处理的不同操作。
有没有 rxjs 操作可以做到这一点?
【问题讨论】:
我有一个需要很长时间才能响应的后端 api 调用。大概10分钟吧。但是,它确实通过信号器发布进度更新。将信号器位放在一边,我需要一种方法来发布 http 帖子,但不等待响应。开火然后忘记。
为了对此进行扩展,我在 ngrx 效果中调用 api。拨打电话后,我想启动我的减速器将处理的不同操作。
有没有 rxjs 操作可以做到这一点?
【问题讨论】:
您 subscribe 对您的 HTTP 调用触发它们,并在调用完成后使用回调来执行某些操作。
但您可以简单地在函数中进行调用,而不必等待 HTTP 调用结束:
doSmthSync() {
this.myService.myCall(...myArgs).subscribe(response => {/* Do smth async */});
// Do something here that will be made without waiting for the end pf the call
}
【讨论】:
这取决于。
即使 http 连接被切断,您的服务器是否继续工作?在这种情况下,您可以从客户端abort(假设您使用的 HTTP 库支持此功能)。如果它大部分完成得很快,但有时需要 10 分钟,你也可以在 Rx 流上使用.timeout() 来停止收听它。
另一种解决方案是在不等待应答的情况下解决 http 调用。这可以使用 .toPromise() 而不是 awaiting this 或 .subscribe() 来完成,而无需任何处理程序。但是这些资源将被分配并在后台继续运行,而没有任何选项可以对这些资源做任何事情。
【讨论】: