【问题标题】:then function is not defined那么函数没有定义
【发布时间】:2016-05-20 10:15:03
【问题描述】:

我有一个函数来获取我需要存储在本地存储中的当前公司代码,并在其余的 API 调用中使用它。所以在没有检索到这个公司代码的值之前,我不应该进行 API 调用。 这就是我获取公司代码的方式

currentDivision = function() {
    var q = $q.defer();
    var division = window.localStorage.getItem("CurrentDivision");
    if(division){
        return q.resolve(division);
    }
    else{
        var url = this.fooApi + "current/Me?$select=CurrentDivision";
        $http.get(url)
            .success(function(data) {
                division = data.d.results[0].CurrentDivision;
                window.localStorage.setItem("CurrentDivision", division);
                return q.resolve(division);
            })
    }
    return q.promise;
}

这就是我在确保成功检索当前分区后尝试调用其余 API 调用的方式:

$scope.openModal = function() {
        $scope.modal.show().then(function() {
            currentDivision().then(function(){
            fooServices.getData().then(function() {
                $scope.closeModal();
            }, function(reason) {
                // handle the error
                $scope.showAlert(reason);
                $scope.closeModal();
            })
            });
        })
}

但是当我尝试这个时,我收到以下错误消息: TypeError:无法读取未定义的属性“then”

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您应该始终返回q.promise。删除return in:

if (division) {
    return q.resolve(division);
}

即:

var q = $q.defer();
// ...
if (division) {
    q.resolve(division);
} else { 
  //...
}
return q.promise;

这样你就返回了已经解决的承诺,它会立即调用then

【讨论】:

  • 谢谢,但现在,不知何故,我通过了它,即使未解决承诺,也会触发 API 调用。
【解决方案2】:

试试这个:

if (division) {
    return $q.when(division);
}

并改进您的代码:

currentDivision = function () {
    if (division) {
        return $q.when(division);
    }

    var url = this.fooApi + "current/Me?$select=CurrentDivision";
    return $http.get(url).then(function (data) {
         division = data.d.results[0].CurrentDivision;
         window.localStorage.setItem("CurrentDivision", division);
         return division;
    });
}

【讨论】:

  • 谢谢,但这里也有同样的问题,在调用 fooServices.getData() 之前,我需要除法的值不为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2013-04-24
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多