如何在AngularJS中访问在promise中声明的变量

时间:2016-04-22 15:04:02

标签: javascript angularjs angular-promise

我是AngularJS的新手,我需要访问Javascript中承诺内部分配的变量

this.reqData= this.profileService.getData();
var resp1 = angular.fromJson(this.reqData);
this.data1;

var that = this;
resp1.$promise.then(function (data) {
  that.data1= data.resource.resource;
}).catch(function (error) {
  console.log(error);
});

console.log(this.data1);

可以从HTML访问变量data1,但它在Javascript中显示undefined

2 个答案:

答案 0 :(得分:6)

Promise是异步的。问题在于,当您到达console.log时, $promise.then代码尚未运行。 您必须等待承诺履行才能访问该数据。

您想要应用于该值的任何操作必须在内部中完成您传递给then的回调函数:

resp1.$promise.then(function (data) {
  var data1 = data.resource.resource;
  // do all your processing on data1 *here*
  console.log(data1);
}).catch(function (error) {
  console.log(error);
});

AngularJS能够在获取数据时更新HTML,因为$promise是Angular-aware - 它知道,一旦你的回调运行,它必须告诉AngularJS刷新/重绘你的页面(和因此更新数据。)

答案 1 :(得分:1)

因为您不知道promise何时返回,所以console.log(this.data1);

中不会立即为您提供

您可以在callback

中访问您的数据
resp1.$promise.then(function (data) {
  that.data1= data.resource.resource;
  }).catch(function (error) {
  console.log(error);
});