退货声明不等待承诺

时间:2017-08-04 10:05:08

标签: javascript angularjs

我有服务。让我们说这会返回字符串" 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()函数跳转到函数的末尾,而不是等待.then,什么都不返回,因此返回undefined。有人可以解释为什么它不等待承诺完成吗?

如果我用直接

替换回报,那么服务就不是问题
$scope.output = response.data;

它工作正常。这个问题以及它设置的原因是,一旦我开始移动它,createConnection()函数最终会在一个单独的JS文件中发生,所以上面的解决方案不会起作用。因此,我认为我需要返回声明。

1 个答案:

答案 0 :(得分: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;
    });
}