成功之间的区别,然后随着决心,承诺,http在angularjs中

Difference between success,then along with resolve, promise,http in angularjs

本文关键字:http 承诺 angularjs 决心 之间 区别 然后 成功      更新时间:2023-09-26

在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);
    });
})
});

关于thensuccess之间的实际差异,这里有一些很好的观点: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事件。