异步函数返回未定义,$q延迟
Asynchronously function returns undefined with $q deferred
我通过如下所示的工厂从我的 api 调用我的数据:
app.factory('Service', ['$http', function ($http) {
var urlBase = 'http://localhost:50476/api';
var Service = {};
Service.getComp = function () {
return $http.get(urlBase + '/complaints')
};
return Service;
}]);
然后我使用我的控制器来使用指令:
getComp();
$scope.comp = [];
function getComp() {
var deferred = $q.defer();
Service.getComp()
.success(function (comp) {
console.log('comp', comp); //returns array data
$scope.comp = comp.data;
deferred.resolve(comp);
})
.error(function (error) {
$scope.error = 'error' + error.message;
});
return deferred.promise;
}
$scope.index = 0;
$scope.complaints = $scope.comp[0];
console.log($scope.complaints); //undefined
console.log($scope.comp); //array of 0
当我尝试访问函数之外的项目时,它是未定义的。我试图寻找像使用$q这样的分辨率,但它仍然没有显示数据。当我添加延迟部分时,我的 ng 重复也停止工作。
试试这个:
getComp();
$scope.comp = [];
function getComp() {
return Service.getComp()
.success(function (comp) {
$scope.comp = comp.data;
$scope.complaints = $scope.comp[0];
})
.error(function (error) {
$scope.error = 'error' + error.message;
});
}
执行日志时未定义这些值,因为这些行在请求从服务器返回之前运行。这就是为什么设置$scope.complaints
必须进入success
回调的原因。
如果你想确保在开始逻辑之前complaints
加载到某些状态,你可以使用 UI-routers resolve
关键字(我想你正在使用带有 ionic - 标准包的 UI-路由器)
在你主要.js
$stateProvider.state('yourState', {
resolve: {
complaints: function(Service) {
return Service.getComp();
}
}
});
然后,您可以在控制器中注入complaints
.controller('myController', function(complaints) {
$scope.complaints = complaints;
})
resolve
$stateProvider将阻止并等待承诺解决...
相关文章:
- 为什么“;未定义的“;在JavaScript中结束循环
- 要求未定义JS回调参数
- 如何检查管道中未定义的项目
- TypeError:无法读取属性'推'未定义的JavaScript
- $window.ga在AngularJS事件中未定义
- 未捕获的TypeError无法读取未定义的属性socialsharing
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何消除代码中的未定义和其他问题
- 未捕获的ReferenceError:$未定义
- this.router在AngularJS 2中未定义
- 未捕获的类型错误:无法读取属性'删除'的未定义
- 节点fs.stat名称未定义
- 尝试在PHP中回显输入文本时出现未定义的索引错误
- Jquery未定义函数正在停止其他操作
- AngularJS指令出错-无法读取属性'编译'的未定义
- 这.SOMETHING 总是返回未定义的 - extjs
- 异步函数返回未定义,$q延迟
- AngularJS 延迟加载在 1.3.x 迁移后中断,获取参数“XXCntr”不是一个函数,未定义
- JQuery:延迟加载JQuery和'$未定义'