如何破坏未解决的承诺

Sur*_*ana 11 angularjs angular-promise

看看代码片段

$scope.getSongs = function(keyword){
     songServices.getSongList(keyword).then(
         function(resp){
             $scope.songList = resp.data.songList;
         }
     );
}
Run Code Online (Sandbox Code Playgroud)

这里getSongList只是通过HTTP请求返回来自服务器的歌曲列表.

在我的HTML中:

<input auto-focus type="text" placeholder="Enter song ID/Keyword" ng-model="keyword" ng-change="getSongs()">
Run Code Online (Sandbox Code Playgroud)

这里的问题是承诺的行为,有时如果某些承诺需要更多的时间(即使在ms.)来解决,那么它会显示错误的数据.当你搜索'AKON'时,让我们说第一次'A'的回复最后返回然后用虚假数据刷新范围,是否有任何方法可以在向服务器发送另一个承诺之前停止或放弃尚未解决的承诺,或者如何我可以处理这种情况吗?

提前致谢.

JB *_*zet 10

通过在'timeout'配置选项中传递promise并解析该promise,可以取消$ http调用.

文档:

timeout - {number | Promise} - 超时(以毫秒为单位),或承诺在解决时应中止请求.

例:

var canceler = $q.defer();
$http.get(someUrl, { timeout: canceler.promise });

// later: cancel the http request

canceler.resolve();
Run Code Online (Sandbox Code Playgroud)


Ken*_*per 6

而不是破坏承诺,最好不要在用户停止输入之前拨打电话.您可以使用ng-options指令设置去抖动计时器.这样,只有在用户停止输入后才会执行操作.

<input auto-focus type="text" placeholder="Enter song ID/Keyword" ng-model="keyword" ng-change="getSongs" ng-model-options="{ debounce: 500}">