如何为范围分配承诺

Ina*_*ble 12 angularjs restangular

如何为$ scope.advertiserName分配$ promise?在下面的示例中,Console.log($ scope.title)返回"undefined".

 Restangular.all('advertiser').one("?id=" + 1).getList().then(function(data) {
   $scope.advertiserName = data.name;
   $scope.advertiserId = data.id;
 });

 $scope.title = $scope.advertiserName;
 $scope.id = $scope.advertiserId;
Run Code Online (Sandbox Code Playgroud)

Vin*_*eet 1

如果我的理解是正确的,那么这是由于异步调用而发生的。

异步意味着发送请求(或者更确切地说,接收响应)被从正常执行流程中取出。在您的示例中, $.ajax 立即返回,并且在调用您作为成功回调传递的函数之前执行下一条语句 return result; 。

你应该这样做

$scope.someFunction = function () {
 Restangular.all('advertiser').one("?id=" + 1).getList().then(function(data) {
   return $scope.advertiserName = data.name;
 });
}
$scope.title = $scope.someFunction(); //It will give you output
Run Code Online (Sandbox Code Playgroud)

编辑1:

我读了很多相同的文章,我注意到调用的响应asynchronous将从正常的执行流程中取出。无论你使用restangule还是$http调用,都是asynchronous调用。所以编译器不会等待你的响应。您需要告诉编译器等待 ajax 响应。我在我的一个项目中做了什么。这是一个简单的例子,可以说明更多。

首先我声明了一个控制器函数。像下面这样

$scope.asynchronousCallee = function (){
 $http.get('/url').
  success(function(data, status, headers, config) {
    $scope.myAjaData = data;
  });
}

$scope.asynchronousCallee(); //Call above function just after the declaration
Run Code Online (Sandbox Code Playgroud)

简而言之,此函数将通过调用从服务器接收数据get并在变量中分配响应,但请注意此成功函数将被调用asynchronously。所以我做了什么,我asynchronousCallee在声明之后调用了函数。现在编译器将等待该函数的响应,执行该函数后,编译器将继续执行。希望对兄弟有帮助:-)