AngularJS 以及调用局部函数时promise值的作用 - undefined
AngularJS and the effect of the promise value when calling a local function - undefined
我是 Angular 的新手,正在努力绕过一个我不想再使用的数据库调用。在调用数据库的代码的响应和访问存储变量(通过 getter)的新代码之间,唯一的区别是响应对象的 $promise
值是 undefined
(在新代码)而不是 Object
(在旧代码中)。这种差异似乎导致了以下错误:TypeError: undefined is not a function
;我正在使用 AngularJS v1.2.0-rc.3 我必须使用异步调用才能将 $promise
值设置为 Object
还是有办法手动set/cast吗?
以下是一些代码片段:
工厂(查询服务):
var recentResponse = null;
var getRecentResponse = function() {
return recentResponse;
};
var doQuery = function (input, handler, errorHandler) {
MyResource.saveInput(input, function (response) {
// save JSON response locally (NEW!)
recentResponse = response;
// save JSON response to DB via handler (old)
handler(response);
},
function (errors) {
errorHandler(errors);
});
};
var getQueryById = function(id, handler) {
// query the DB
MyResource.getObjectWithId(id, function(response) {
handler(response);
});
};
return {
doQuery: doQuery,
getQueryById: getQueryById,
getRecentResponse: getRecentResponse
};
控制器:
function loadQueryById(id) {
// call the DB query
QueryService.getQueryById(id, function(response) {
$scope.query = response;
$scope.query.val2 = $scope.getVal2();
});
}
function loadLastQueryResponse() {
// load from local var
$scope.query = QueryService.getRecentResponse();
$scope.query.val2 = $scope.getVal2();
}
loadQueryById($routeParams.id);
loadLastQueryResponse();
$scope.getVal2 = function() {
return $scope.query.value2 ? JSON.parse($scope.query.value2) : "";
};
当调用loadQueryById()
时$scope.query
设置为$promise
字段=Object
;当调用 loadLastQueryResponse()
时,所有 $scope.query
字段完全相同,除了 $promise
是 undefined
,并且以下行在尝试调用 [=28= 时失败并出现错误]:
TypeError: undefined is not a function
at loadLastQueryResponse (MyController.js:20)
$scope.query.$resolved
字段在这两种情况下都是 true
。
我的 Angular 版本是否与此有关,或者我没有等待兑现承诺(因为我不需要)?我也试过用处理程序调用 QueryService.getRecentResponse()
,我也试过使用 then()
格式(我可能没有正确实现)但结果是一样的。
已更改函数和变量名称以保护无辜者。提前致谢!
正如@laurent 在评论中的回答,问题是一旦请求不再异步调用数据库,而是同步调用函数;因此必须将 $scope.getVal2 = function () {..}
声明移至 function loadLastQueryResponse(){..}
上方,以便后者中的调用代码知道前者的函数实现。
我是 Angular 的新手,正在努力绕过一个我不想再使用的数据库调用。在调用数据库的代码的响应和访问存储变量(通过 getter)的新代码之间,唯一的区别是响应对象的 $promise
值是 undefined
(在新代码)而不是 Object
(在旧代码中)。这种差异似乎导致了以下错误:TypeError: undefined is not a function
;我正在使用 AngularJS v1.2.0-rc.3 我必须使用异步调用才能将 $promise
值设置为 Object
还是有办法手动set/cast吗?
以下是一些代码片段:
工厂(查询服务):
var recentResponse = null;
var getRecentResponse = function() {
return recentResponse;
};
var doQuery = function (input, handler, errorHandler) {
MyResource.saveInput(input, function (response) {
// save JSON response locally (NEW!)
recentResponse = response;
// save JSON response to DB via handler (old)
handler(response);
},
function (errors) {
errorHandler(errors);
});
};
var getQueryById = function(id, handler) {
// query the DB
MyResource.getObjectWithId(id, function(response) {
handler(response);
});
};
return {
doQuery: doQuery,
getQueryById: getQueryById,
getRecentResponse: getRecentResponse
};
控制器:
function loadQueryById(id) {
// call the DB query
QueryService.getQueryById(id, function(response) {
$scope.query = response;
$scope.query.val2 = $scope.getVal2();
});
}
function loadLastQueryResponse() {
// load from local var
$scope.query = QueryService.getRecentResponse();
$scope.query.val2 = $scope.getVal2();
}
loadQueryById($routeParams.id);
loadLastQueryResponse();
$scope.getVal2 = function() {
return $scope.query.value2 ? JSON.parse($scope.query.value2) : "";
};
当调用loadQueryById()
时$scope.query
设置为$promise
字段=Object
;当调用 loadLastQueryResponse()
时,所有 $scope.query
字段完全相同,除了 $promise
是 undefined
,并且以下行在尝试调用 [=28= 时失败并出现错误]:
TypeError: undefined is not a function
at loadLastQueryResponse (MyController.js:20)
$scope.query.$resolved
字段在这两种情况下都是 true
。
我的 Angular 版本是否与此有关,或者我没有等待兑现承诺(因为我不需要)?我也试过用处理程序调用 QueryService.getRecentResponse()
,我也试过使用 then()
格式(我可能没有正确实现)但结果是一样的。
已更改函数和变量名称以保护无辜者。提前致谢!
正如@laurent 在评论中的回答,问题是一旦请求不再异步调用数据库,而是同步调用函数;因此必须将 $scope.getVal2 = function () {..}
声明移至 function loadLastQueryResponse(){..}
上方,以便后者中的调用代码知道前者的函数实现。