【问题标题】:How can I call an http backend but not wait for response?如何调用 http 后端但不等待响应?
【发布时间】:2018-04-17 11:33:06
【问题描述】:

我有一个需要很长时间才能响应的后端 api 调用。大概10分钟吧。但是,它确实通过信号器发布进度更新。将信号器位放在一边,我需要一种方法来发布 http 帖子,但不等待响应。开火然后忘记。 为了对此进行扩展,我在 ngrx 效果中调用 api。拨打电话后,我想启动我的减速器将处理的不同操作。
有没有 rxjs 操作可以做到这一点?

【问题讨论】:

    标签: angular rxjs ngrx


    【解决方案1】:

    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
    }
    

    【讨论】:

      【解决方案2】:

      这取决于。

      即使 http 连接被切断,您的服务器是否继续工作?在这种情况下,您可以从客户端abort(假设您使用的 HTTP 库支持此功能)。如果它大部分完成得很快,但有时需要 10 分钟,你也可以在 Rx 流上使用.timeout() 来停止收听它。

      另一种解决方案是在不等待应答的情况下解决 http 调用。这可以使用 .toPromise() 而不是 awaiting this 或 .subscribe() 来完成,而无需任何处理程序。但是这些资源将被分配并在后台继续运行,而没有任何选项可以对这些资源做任何事情。

      【讨论】:

        猜你喜欢
        • 2020-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 2017-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多