在Restangular中取消待处理的API调用

惠洲

我有API服务:

var SearchSuggestionApi = function (Restangular) {

  return {
    getSuggestion: function (keyword) {
      return Restangular.one('search').customGET(null, {keyword:keyword});
    }
  };

};

SearchSuggestionApi.$inject = [
  'Restangular'
];

我有控制器来调用此API:

vm.getSuggestion = function (keyword) {

  SearchSuggestionApi.getSuggestion(keyword)
    .then(
      function (data) {
        vm.listData = data;
      }, function (error) {
        console.log(error);
      });
};

我的问题是我打vm.getSuggestion(keyword)两次或多次(必须打一次以上)。如:

vm.getSuggestion('a'); // => Return a array with many object in this vm.getSuggestion('a b');// => Return empty array

由于vm.getSuggestion('a')返回许多数据,它将在之后完成vm.getSuggestion('a b')所以,vm.listData[{object1}, {object2}, ...]的,但我想vm.listData[](最后一个函数的响应数据)。

当我调用秒函数或获取最后一个响应数据并设置为的其他方法时,如何取消第一个函数中的未决API调用vm.listData

我研究了一些有关的文章cancel pending API calls,但对我的问题没有帮助。

谢谢你的帮助 :)

应得

有多种解决方法:

  • 您可以简单地在then回调中检查接收到的值是否仍然是当前值:

    vm.getSuggestion = function (keyword) {
    
      SearchSuggestionApi.getSuggestion(keyword)
        .then(
          function (data) {
            if (vm.keyword === keyword) {
                vm.listData = data;
            }
          }, function (error) {
            console.log(error);
          });
    };
    
  • 您可以通过指定超时承诺来取消请求

  • 如果您经常解决此问题,则可能希望使用适当的运算符RxJS可观察流替换为Promise这是最干净的解决方案,但确实需要其他库。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在React API调用中抓取操作仍处于待处理状态

如何在AngularJS中取消待处理的请求?

取消待处理的$ http请求

如何取消待处理信号?

取消待处理的录制内容?

在React Native中使用异步/等待处理API调用

调用EntityManager.find()之后,MySQL中的待处理进程

如何取消待处理的Windows 7更新

如何取消待处理的脚本标签请求?

如何通过RXJS在内部HTTP中取消待处理的请求?

在Angular 6和Rxjs 6中取消待处理的HTTP请求并再次触发Event

fifo:取消阻止待处理的未清通话

创建几个待处理的意图AlarmManager并取消特定的警报

如果预订处于待处理、取消和未付款状态,则禁用 WCFM 中的预订状态更新选项

Chrome中的“待处理活动”是什么?

在Android中覆盖待处理的过渡

缩小TFS中待处理的更改

从服务中删除待处理的警报/通知

停止JavaScript中待处理的异步功能

“示例表”在jbehave中显示待处理

ServiceNow推送通知卡在“待处理”中

为什么我的CompletableFuture永远不会返回我需要的响应并且api调用处于待处理状态?

Android通知操作未调用待处理的服务意图

在 api 中处理外部 API 调用

在GKMatchmakerViewController中处理取消

如何使用Google附近的API接收待处理邮件?

选择待处理的请求(Friendship Restful Api)PHP和MySql

如何取消在飞行中的未决HTTP API调用?

apache spark中的批处理API调用?