2017-08-04 62 views
0

我有一项服务。可以说这返回字符串“B”。 我有以下的控制器:退货声明不等于承诺

$scope.output; 
var someVariable = 'A'; 

$scope.setUpConnection = function (someVariable) { 
    $scope.output = createConnection(someVariable); 
    console.log($scope.output); 
} 

createConnection = function (someVariable) { 
    var result; 
    service.connect(someVariable).then(function success(response) { 
     result = response.data; 
    }, function error(response) { 
     result = 'Error' + response; 
    }); 
    return result; 
} 

的的createConnection()函数跳转到函数结束时,不等待。然后,返回什么并因此返回未定义。有人可以解释为什么它不等待承诺完成?

的服务是没有问题的,如果我更换一个直接

$scope.output = response.data; 

它工作正常的回报。这个问题以及这样设置的原因是,一旦我开始移动它,createConnection()函数将最终发生在一个单独的JS文件中,因此上述解决方案将无法工作。因此,我想我需要返回声明。

+1

可能的复制里面的承诺[如何返回从一个异步调用的响应?](https://stackoverflow.com/questions/14220321/how-do-i-返回异步调用的响应) – Liam

回答

1

这将无法正常工作,因为在您返回result时,承诺未得到解决。你必须解开的setUpConnection

$scope.setUpConnection = function (someVariable) { 
    service.connect(someVariable).then(function success(response) { 
     $scope.output = response.data; 
    }, function error(response) { 
     $scope.output = 'Error' + response; 
    }); 
} 
+0

但是,这个功能会被各种其他控制器调用。我觉得在每个控制器中编写setUpConnection函数可能有点多余。因此,我为什么要回归声明,因为那时我可以用不同的控制器填充一堆变量。 – Patrick

+0

然后你可以创建一个回调方法来在promise被解析后返回响应 –