在AngularJS中访问promise中的函数参数

时间:2014-01-04 01:20:25

标签: angularjs promise

我有一个包含getServiceData函数的AngularJS服务:

var DataService = (function () {
  function DataService($log, $http, config) {
    this.$log = $log;
    this.$http = $http;
    this.config = config;
  }
  DataService.prototype.getServiceData = function (fullUrl, qsData, rootNode) {
    var _this = this;
    if (qsData === null || typeof qsData === "undefined") {
        qsData = null;
    }

    return this.$http.jsonp(fullUrl, { params: qsData }).then(function (response) {
        var data = rootNode === null ? response.data : eval("response.data." + rootNode);
        return data;
    });
  };
  return DataService;
})();

返回JSON数据,但如果我传递rootNode参数,则在“then”代码中它始终为null。关于如何在“then”代码中访问rootNode参数的任何想法?

2 个答案:

答案 0 :(得分:0)

eval的范围在浏览器中不可靠,这就是问题所在。

JavaScript Closure - Eval() and capturing variables in Eval()'s scope

不建议使用eval。在您的情况下,您应该使用括号表示法语法:

var data = rootNode === null ? response.data : response.data[rootNode];

答案 1 :(得分:0)

来自AngularJs Promise Api

$http回复承诺

  

然后(successCallback,errorCallback,notifyCallback) - 无论何时或将要解析或拒绝承诺,只要结果可用,就会异步调用其中一个成功或错误回调。使用单个参数调用回调:结果或拒绝原因。

then函数取三个callback函数而不是任何有价值的参数,并在你的ajax请求完成后调用它。因此,如果您想要访问then中的任何变量或对象,则需要指定then的外部范围,以便在评论中使用。

您应该使用angular eval method或@Khanh提到的方式而不是JavaScript eval