我想知道如何从angular函数中检索“good”数组。我有角度的这个功能:
app.run(function($rootScope,Communications,$http,$filter) {
$rootScope.getCommunication =
function(object_type,val,id,isType,isSendSms,getNotes){
var array = {};
var newArr = [];
// getting data from mysql data
var myVals = Communications.find({
filter: {
where: {
and : [{
communications_type_code : val
},{
object_id : id
},{
object_type : object_type
}]
}
}
}).$promise
.then(function(data) {
for(var ind=0; ind<data.length; ind++){
array['address_type'] = data[ind].address_type;
array['contact_value'] = data[ind].contact_value;
array['send_sms'] = data[ind].send_sms;
}
newArr.push(array);
return newArr;
});
return newArr;
};
});
当我在Angular控制器中调用这个函数时:
var arr = $rootScope.getCommunication(2,3,$id);
console.log(arr);
我进入控制台是这样的:
当我打电话给arr [0]时,我得到了未定义。 我怎样才能收到这些数据?
答案 0 :(得分:1)
您需要返回承诺,目前您在更新之前返回数组。异步通过先运行所有同步代码然后运行任何异步来运行。
var arr = []; // runs first
promise.then(function(result){arr = result}) // runs third.
return arr; // runs second
您需要更改代码才能返回承诺。但是,这也意味着您的调用代码必须处理异步代码。
function asyncFunc() {
return promise.then(function(result){return result});
}
asyncFunc().then(function(result) {console.log(result)}) // output is the value of result.
在您上面提供的代码的上下文中
app.run(function($rootScope,Communications,$http,$filter) {
$rootScope.getCommunication =
function(object_type,val,id,isType,isSendSms,getNotes){
// getting data from mysql data
return Communications.find({
filter: {
where: {
and : [{
communications_type_code : val
},{
object_id : id
},{
object_type : object_type
}]
}
}
}).$promise
.then(function(data) {
var array = {};
var newArray = [];
for(var ind=0; ind<data.length; ind++){
array['address_type'] = data[ind].address_type;
array['contact_value'] = data[ind].contact_value;
array['send_sms'] = data[ind].send_sms;
}
newArr.push(array);
return newArr;
});
};
});
和调用函数:
var arr = $rootScope.getCommunication(2,3,$id)
.then(function(arr){console.log(arr)})
答案 1 :(得分:0)
您可以按以下方式使用回调
app.run(function($rootScope,Communications,$http,$filter) {
$rootScope.getCommunication =
function(object_type,val,id,isType,isSendSms,getNotes, callback){
var array = {};
var newArr = [];
// getting data from mysql data
var myVals = Communications.find({
filter: {
where: {
and : [{
communications_type_code : val
},{
object_id : id
},{
object_type : object_type
}]
}
}
}).$promise
.then(function(data) {
for(var ind=0; ind<data.length; ind++){
array['address_type'] = data[ind].address_type;
array['contact_value'] = data[ind].contact_value;
array['send_sms'] = data[ind].send_sms;
}
newArr.push(array);
//return using callback
return callback(newArr);
});
//return using callback
return callback(newArr);
};
});
并使用回调来访问结果
$rootScope.getCommunication(2,3,$id, function(result){
var arr = result
})