2017-08-04 84 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被解析後返回響應 –