Javascript 然后函数没有定义
我有一个函数来获取当前的公司代码,我需要将其存储在localstorage上,并在其余的API调用中使用它。因此,在没有检索到该公司代码的值之前,我不应该进行API调用。 这就是我获取公司代码的方式Javascript 然后函数没有定义,javascript,angularjs,Javascript,Angularjs,我有一个函数来获取当前的公司代码,我需要将其存储在localstorage上,并在其余的API调用中使用它。因此,在没有检索到该公司代码的值之前,我不应该进行API调用。 这就是我获取公司代码的方式 currentDivision = function() { var q = $q.defer(); var division = window.localStorage.getItem("CurrentDivision"); if(division){ re
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”您应该始终返回
q.promise
。在以下位置删除返回按钮
:
if (division) {
return q.resolve(division);
}
即:
通过这种方式,您将返回已解决的promise,它会立即调用,
。尝试以下操作:
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;
});
}
谢谢,但现在,不知何故,我通过了它,即使承诺没有得到解决,也会触发API调用。感谢的可能重复,但这里也存在同样的问题,我需要在调用fooServices.getData()之前,除法的值不为null。
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;
});
}