Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加$q以订购执行?_Javascript_Angularjs_Promise_Q - Fatal编程技术网

Javascript 如何添加$q以订购执行?

Javascript 如何添加$q以订购执行?,javascript,angularjs,promise,q,Javascript,Angularjs,Promise,Q,我要下令处决我。我需要确保调用完我完整的coords()方法后,它就完成了。如何添加承诺或$q?我尝试在控制台上打印,发现coords()函数的最后一行执行后,coords中的forEach循环就完成了。请参阅下面的代码。我真的是个新手 var appa=angular.module('appa',['firebase','uiGmapgoogle-maps']); appa.controller('mainCtrl',函数($firebaseObject,$scope,$q){ $scope

我要下令处决我。我需要确保调用完我完整的coords()方法后,它就完成了。如何添加承诺或$q?我尝试在控制台上打印,发现coords()函数的最后一行执行后,coords中的forEach循环就完成了。请参阅下面的代码。我真的是个新手

var appa=angular.module('appa',['firebase','uiGmapgoogle-maps']);
appa.controller('mainCtrl',函数($firebaseObject,$scope,$q){
$scope.coords=函数(){
var ref=firebase.database().ref();
var latArray=[];
变量lngArray=[];
var cenlat;
var Cenng;
var标记=[];
参考一次(“价值”)
.then(功能(快照)
{
snapshot.forEach(函数(子函数)
{
latArray.push(child.child(“Lat”).val());
console.log(child.child(“Lat”).val());
lngArray.push(child.child(“Long”).val());
变量标记={
id:child.child(“id”).val(),
协调:{
纬度:child.child(“Lat”).val(),
经度:child.child(“Long”).val()
},
选项:{title:child.child(“Alt”).val()}
};
标记器。推动(标记);
LOG(“这是怎么打印的?怎么处理的?”);
});
cenlat=(Math.max.apply(Math,latArray)+Math.min.apply(Math,latArray)/2);
cenlng=(Math.max.apply(Math,lngArray)+Math.min.apply(Math,lngArray)/2);
});
$scope.map.center.latitude=cenlat;
$scope.map.center.longitude=centlng;
LOG(“这是怎么打印的?怎么处理的?”);
});
};
$scope.map={
中心:
{
纬度:51,
经度:4
},
缩放:2
};
$scope.coords();

});您使用的是firebase,可以轻松检查返回的子项并将其存储在变量中。然后递减forEach循环中的变量

//初始化的变量a正在进行子计数

a=snapshot.numChildren()您注意到代码段中的语法错误了吗?你发布的代码是无效的javascript,你真的应该修复它,并且发布具有正确格式的代码,因为你的代码更难阅读,当然这不是你编写代码的方式?!?而且CONSOLE.LOG无论如何都会失败,它是CONSOLE.LOG-javascript不是visual basic,它区分大小写。很遗憾,您已经通过收集证据完成了95%的调试-这两条消息以错误的顺序记录-因此您知道代码执行的时间。您所需要做的就是对代码进行洗牌,以便
$scope.map
语句在正确的时间执行。这并不复杂。一旦解决了,还有更多。。。。(1) 你的平均计算似乎是错误的;您很可能想要
(最大+最小)/2
,而不是
(最大+最小/2)
。(2) 请记住,lat和lng的范围为-180到+180
(最大+最小)/2
对于任何LAT集群和横跨格伦维奇子午线的LNG都是可以的,但是对于跨越国际日期线的LNG,
(最大+最小)/2
将给出一个意外的结果(而且还不足以说“它永远不会发生”,因为有一天它会发生!)。(3) 最大值和最小值的简单算术平均值有利于异常值;请考虑一个“重心”算法,请至少修正压痕!我知道OP要求与
$q
有关,但这不是必须的。我猜上面的
if(a==0)(…)
块应该演示一些东西,但到底是什么!?在它目前的形式下,除了在下一个电费单上增加一点之外,它什么也没做。