Angularjs Angular最终无法在控制器中启动
我使用一个角度工厂在我的控制器中运行,但是我的最终在控制器中并不有趣,它确实在工厂中运行,下面是代码:工厂-Angularjs Angular最终无法在控制器中启动,angularjs,angular-services,Angularjs,Angular Services,我使用一个角度工厂在我的控制器中运行,但是我的最终在控制器中并不有趣,它确实在工厂中运行,下面是代码:工厂- var createProfile = function (profile) { var deferred = $q.defer(); $http.post("localhost/profile", profile) .success(function(data, status){ deferred.resolve(data);
var createProfile = function (profile) {
var deferred = $q.defer();
$http.post("localhost/profile", profile)
.success(function(data, status){
deferred.resolve(data);
})
.error(function(error, status){
$rootScope.error = sitesettings.parseErrors(error);
})
.finally(function(){
console.log('hello'); // **this message logs**
});
return deferred.promise;
};
在我的控制器中,我有:
profileFactory.createProfile (profile)
.then(function (data) {
// **works if successful**
})
.finally(function () {
console.log('fin'); // **this never fires, successfully or on an error**
});
我想我可以像profileFactory.createProfile(profile,myObject)一样将我的对象传递到profileFactory并返回它,但这似乎违反了直觉
谁能给点建议吗。多谢各位
善意的问候这是因为您返回了一个不同的承诺,而您从未手动解决过。如果您只是
返回$http.post(//等)
它应该可以正常工作
编辑:
我可能很快就会跟你说的。我错过了你的成功。但这似乎没有必要。照办
return $http.post("localhost/profile", profile);
并让您的控制器连接成功、错误和最终处理。在angular中,通常组合为
然后
、捕获
和最后
。您可以使用然后
和最后
的任意组合。这是承诺链。你甚至可以使用then()
,然后是另一个then()
,然后是另一个then
。由于承诺链接,函数then
总是在另一个对象上调用。.success
/。error
不适用于一般承诺(这就是你得到的返回延迟。承诺;
-它只适用于$http
承诺。但是你是对的,这是不需要的-最好返回最初的承诺。不过,我还是坚持。然后
/.catch
在控制器中,而不是$http
-特定的。成功ss
/.error
哦,我明白了,再往下一点,他们也添加了explaincatch
和finally
。所以你是对的。打得好。在你的.error
中,你没有将承诺解析为拒绝,这似乎是主要原因。顺便尝试删除$http调用中的finally,只需检查一下