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
哦,我明白了,再往下一点,他们也添加了explain
catch
finally
。所以你是对的。打得好。在你的
.error
中,你没有将承诺解析为拒绝,这似乎是主要原因。顺便尝试删除$http调用中的finally,只需检查一下