我正在尝试取消api请求,如果用户调用api来加快速度,那么只有最新的api才会返回结果,所有以前的请求都应该被丢弃,但这不起作用,任何人都知道解决方案,请帮助,谢谢
类CartViewModel(val store:Account):base viewmodel(){
私有var请求计算:作业?=空
fun重新计算(){
requestCalculation.let {
if (it != null) {
if (it.isActive) {
requestCalculation!!.cancel()
}
}
}
requestCalculation = viewModelScope.launch(Dispatchers.IO) {
isLoading.postValue(true)
try {
val order = CCOrderManager.shared.calculateTaxesAndApplyRewards(store.id)
refreshOrder()
} catch (e: Exception) {
exception.postValue(e.localizedMessage ?: e.toString())
}
}
}
}
在 api 调用 this.is 活动 {return@launch} 后添加一个检查,终于对我有用了...
fun recalculate() {
calculationRequest?.cancel()
isLoading.postValue(true)
calculationRequest = viewModelScope.launch(Dispatchers.IO) {
try {
val order =
CCOrderManager.shared.calculateTaxesAndApplyRewards(store.id)
// this check is the solution *******
if (!this.isActive) {return@launch}
val catalog = CatalogManager.shared().catalog
} catch (e: Exception) {
}
}
}
取消和执行的顺序是错误的。当函数启动时,请求计算
为 null,因此无法取消。确保首先启动协程,稍后再取消它。例如:
private var requestCalculation: Job? = null
fun recalculate() {
requestCalculation = viewModelScope.launch(Dispatchers.IO) {
delay(10_000)
// do your work...
}
// now the job can be canceled
requestCalculation?.cancel()
}
问题内容: 假设我有一个模型Car,该模型在 ViewModel1中 实例化为以下初始属性: ViewModel1 然后,我需要在下一个视图控制器中完成汽车的其他信息。遵循MVVM时,在视图控制器之间传递模型的 正确 方法是什么? 使用MVC,操作很简单,因为视图可以引用模型: 以下是对该问题的伪尝试,但是我给人的印象是视图模型应该是私有的,并且只能由单个视图控制器访问。因此,以下尝试对我来说似乎
问题内容: 在AngularJS中给出Ajax请求 如果启动另一个请求(相同的后端,例如不同的参数),取消该请求的最有效方法是什么? 问题答案: 此功能通过超时参数添加到1.1.5版本中:
问题内容: 我用于ajax请求,而+ 用于渲染UI。在我的应用程序中,有第三方时间轴(reactJS组件)。时间轴可以通过鼠标滚动进行管理。应用程序在发生任何滚动事件后发送对实际数据的ajax请求。问题是服务器上的请求处理可能比下一个滚动事件慢。在这种情况下,应用可能会有几个(通常是2-3个)请求已被弃用,因为用户会进一步滚动。这是一个问题,因为每次接收新数据时线都会开始重绘。(因为它是react
我使用处理ajax请求,使用渲染UI。在我的应用程序中,有第三方时间线(reactJS组件)。时间线可以通过鼠标滚动来管理。在任何滚动事件之后,应用程序都会发送实际数据的ajax请求。问题是服务器上的请求处理可能比下一个滚动事件慢。在这种情况下,应用程序可能有几个(通常为2-3个)请求,由于用户进一步滚动,这些请求已经被弃用。这是一个问题,因为每次收到新数据时,时间线都开始重新绘制。(因为它是re
问题内容: 使用angular时,在视图内获取对象的首选方法是什么? 看起来好像有这个项目,但是看起来维护得不好。 https://github.com/gdi2290/angular- momentjs 问题答案: 有一个更受欢迎的angular-moment项目… https://github.com/urish/angular- moment 有了它,您可以像这样注入瞬间… jsfiddle
问题内容: 使用此代码: 如何取消请求并丢弃数据,否则,如何在onSuccess方法中识别请求(使用名称/向导/任何名称),以便我可以确定哪个请求已完成? 我正在考虑做一个array.push(pendingRequest)来跟踪挂起的请求 我想允许用户中断他们的请求,更改输入值并重新提交。 有时,原始请求会在新请求之后结束,而我会用“旧”数据替换“正确”数据。(例如,搜索结果在第一个查询中返回5