2017-04-24 62 views
0

我的Ionic 3应用程序的一个页面可以进行网络调用并以承诺的形式接收结果。但有些电话比其他电话需要更多的时间。在某些情况下,在请求B之前发出的请求A可能需要更多时间来响应,而不是请求B.如何取消旧的承诺?

例如,在文本查询搜索中,如果用户触发后端具有不同参数的两个后续请求他可以在响应A之前收到响应B.然后,视图将显示第二个搜索结果,然后在一段时间后显示第一个搜索结果,这不是预期的行为。我总是需要显示上次请求的数据。

我怎样才能取消承诺,以便我不显示最新的数据?

+0

使用observables - 它们是可取消的,但不是Promises。 –

+0

您可能想阅读[这个答案](http://stackoverflow.com/questions/30233302/promise-is-it-possible-to-force-cancel-a-promise/30235261#30235261) –

回答

1

我处理多个请求的争用条件的方式是将时间戳添加到请求中作为查询参数或标题,然后在收到响应时再次检查它。如果时间戳不是已经处理过的最近的时间,就把它扔掉。