我试图像这样延迟我的$ http电话:
githubService.getUserEvents = function getUserEvents() {
return $timeout(
$http.get(ANGULAR_EVENTS).then(function (eventsData) {
return _.map(eventsData.data, function (data) {
return {
type: data.type,
user: data.actor.login,
avatarUrl: data.actor.avatar_url,
createdOn: data.created_at,
repo: data.repo.name
};
});
}),
5000);
};
当我运行它时似乎没有执行延迟的请求,我在chromeconsole中看不到任何错误?另请参见此处jsbin
如何在不使用拦截器的情况下调用延迟的$ http请求?
答案 0 :(得分:2)
删除的答案有这个权利我认为,你确实需要延期,因为你无法从$ timeout返回,同时注释需要注入$ timeout服务。
githubService.getUserEvents = function getUserEvents() {
var deferred = $q.defer();
$timeout(
function(){
$http.get(ANGULAR_EVENTS).then(function (eventsData) {
deferred.resolve(_.map(eventsData.data, function (data) {
return {
type: data.type,
user: data.actor.login,
avatarUrl: data.actor.avatar_url,
createdOn: data.created_at,
repo: data.repo.name
};
}));
})
},2000);
return deferred.promise;
};
看起来我在这里查看了公共API限制但应该可以使用。
<强> 修改 强> 只是回复了$ timeout承诺的评论,它似乎在这里工作(当我昨天开始尝试时,即使在修复$ timeout之后,似乎也没有用,所以不确定出了什么问题但是在这里&#39 ; s函数在不创建额外延迟对象的情况下工作)
githubService.getUserEvents = function getUserEvents() {
return $timeout(function(){
return $http.get(ANGULAR_EVENTS).then(function (eventsData) {
return _.map(eventsData.data, function (data) {
return {
type: data.type,
user: data.actor.login,
avatarUrl: data.actor.avatar_url,
createdOn: data.created_at,
repo: data.repo.name
};
});
})
},2000);
};
我还是要在评论中坚持自己的观点。只要你知道让你自己的推迟会有一些开销,而你无需通过整个承诺链解决任何问题,那么我就不会在第一时间看到这样做的问题(而且我发现它更容易了解)。然而,仅仅为了澄清,$ timeout承诺确实解决了它触发的函数返回的值(这是有道理的但是文档听起来好像$ timeout解决了函数被触发的那一刻而不是它完成时...没有&# 39;通过tbh)来到文档的返回部分。