成功之间的区别,然后随着决心,承诺,http在angularjs中
Difference between success,then along with resolve, promise,http in angularjs
在jquery中,当我们触发ajax调用时,当它成功时,成功函数被调用,但是,现在在角度中,我已经看到人们使用当时以及成功。在谷歌上搜索了一会儿后,我发现然后返回了一个承诺。如果我想加载一个包含来自服务的数据的路由,我会在将数据绑定到模板之前使用 resolve 执行 http req,但在 http 中我既没有使用成功/然后。
我的http请求部分:
movieserviceObj.getlist=function(){
return
$http({ url:'app/api/entertainment.php',data:$.param(dataString),method:'POST'});
解析配置中的部分:
resolve:{movieslist:moviesController.getallMovies}
控制器:
var moviesController=app.controller('moviesController',function($scope,movieslist){
$scope.movies=movieslist.data.result
});
moviesController.getallMovies=function($q,$timeout,movieservice)
{
var defer=$q.defer();
$timeout(function(){
defer.resolve(movieservice.getlist());
},1000);
return defer.promise;
}
现在上面的代码工作完全正常,但数据绑定发生在 1 秒后,如 $timeout 中设置的那样。我的问题是 http 请求在 1 秒内获取数据,但我也必须等待 1 秒。有什么办法,一旦 http req 完成,它应该返回承诺解决,直到显示加载栏?在 http 中,我没有使用成功/那么它是如何工作的。此外,即使在成功的http请求之后,我如何确保它将响应中名为"status"的键设置为true,如果为true,则仅解决或拒绝。
$http
已经返回了一个承诺,所以在这里使用then()
更有意义,因为:
- 您不需要每次都等待 1 秒
- 如果请求时间超过 1 秒,则不会冒无法获取数据的风险
下面是一个示例:
var moviesController = app.controller('moviesController',function($scope, movieservice){
movieservice.getlist().then(function(res){
$scope.movies = res.data;
}, function(err){
console.log('error:', err);
});
})
});
关于then
和success
之间的实际差异,这里有一些很好的观点:Angular HttpPromise:"成功"/"错误"方法和"then"参数之间的区别。
此外,即使在成功的http请求之后,我如何确保它将响应中名为"status"的键设置为true,如果为true,则仅解决或拒绝。
您必须修改服务才能执行此操作,类似于在控制器中执行的操作:
movieserviceObj.getlist=function(){
var defer=$q.defer();
$http({
url:'app/api/entertainment.php',
data:$.param(dataString),
method:'POST'
}).then(function(res){
if (res.status === true) {
defer.resolve(res);
}
else {
defer.reject({error: 'Status not true'});
}
}, function(err) {
defer.reject(err);
})
return defer.promise;
}
有关路由解析的信息:
应注入控制器的可选依赖项映射。如果这些依赖项中的任何一个是承诺,则路由器将等待它们全部解析或拒绝一个依赖项,然后再实例化控制器。如果成功解析所有承诺,则会注入已解析承诺的值并触发$routeChangeSuccess事件。如果任何承诺被拒绝,则会触发$routeChangeError事件。
- Angular中的过滤和$http承诺
- $http中的Angular 1数据绑定承诺不起作用
- 如何同时使用节点承诺和 http
- 承诺中的成功回调不会发生$http
- angular服务中的$http承诺
- 同步解决HTTP延迟承诺
- AngularJS$http承诺异常不会冒泡
- 从工厂返回控制器$http承诺时未定义
- 角度$http承诺无法解决
- Angular JS$http承诺表现得像真正的$q承诺吗?
- Angularjs模拟一个返回$http承诺的函数
- AngularJS -拒绝了使用$routeProvider:resolve的$http承诺
- Angular的$http承诺和回调函数没有触发
- Angular HTTP承诺返回空
- Angular js的Http承诺在typescript中
- 如何在$q下传递多个$http承诺
- 为什么这个对象在angular http承诺对象中是$window ?
- $http承诺不更新作用域(ng-hide)
- 拒绝Angular的$http承诺
- Angularjs $http承诺时没有返回对象