gpt4 book ai didi

javascript - 成功、然后以及 AngularJS 中的解析、 promise 、http 之间的区别

转载 作者:行者123 更新时间:2023-12-03 10:56:51 25 4
gpt4 key购买 nike

在jquery中,当我们触发ajax调用时,当它成功时,会调用success函数,但是,现在在 Angular 中,我看到人们使用then以及success。谷歌搜索了一下我发现 then 返回一个 promise 。如果我想加载一个包含来自服务的数据的路由,我在将数据绑定(bind)到模板之前使用resolve执行http req,但在http中我没有使用success/then

我的http请求部分:

movieserviceObj.getlist=function(){ 
return
$http({ url:'app/api/entertainment.php',data:$.param(dataString),method:'POST'});

解决配置中的部分:

 resolve:{movieslist:moviesController.getallMovies}

Controller :

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

现在上面的代码工作完全正常,但数据绑定(bind)发生在 $timeout 中设置的 1 秒后。我的问题是 http 请求在 1 秒内获取数据,但我也必须等待 1 秒。有什么办法,一旦 http 请求完成,它应该返回 promise 解决,直到显示加载栏?在 http 中,我没有使用 success/then 那么它是如何工作的。此外,即使在成功的 http 请求之后,我如何确保它具有名为“status”的 key 作为响应设置为 true,如果 true 则仅解决或拒绝。

最佳答案

$http 已经返回了一个 Promise,因此使用 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: difference between `success`/`error` methods and `then`'s arguments .

<小时/>

Also even after successful http request how can I make sure that it has key named 'status' in response set to true, if true then only resolve or reject.

您必须修改您的服务才能执行此操作,类似于您在 Controller 中所做的操作:

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;
}
<小时/>

有关路由解析的信息:

An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated. If all the promises are resolved successfully, the values of the resolved promises are injected and $routeChangeSuccess event is fired. If any of the promises are rejected the $routeChangeError event is fired.

关于javascript - 成功、然后以及 AngularJS 中的解析、 promise 、http 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28237155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com