我正面临一个奇怪的案例,我正在使用google directionsService.route。但它没有很好地同步。这是我的代码:
angular.forEach(requestArray, function(v, i) {
directionsService.route(v, function(result, status) {
var googleLeg = result.routes[0].legs[0];
// sth else...
});
});
如您所见,我将位置数组循环到路径中。每当我触发该函数时,它将首先通过requestArray
,(如果我们在该行(var googleLeg = result.routes[0].legs[0]
)上创建一个断点,它将无法到达那里直到它遍历所有requestArray
1}}。(我从0 - 长度);然后它将有directionsService.route的第二个循环(此时,它将到达行(var googleLeg = result.routes[0].legs[0]
);对此有任何想法吗?
答案 0 :(得分:1)
基本上你的问题是调用google服务是异步调用,并且在回调执行时你无法保证。如果您需要同步处理requestArray
,您可以执行以下操作:
function start() {
// create a copy of request array
var stuff = [].slice.call(requestArray);
function continueSync() {
// stop the recursion if we have nothing left to process
if (!stuff || stuff.length == 0) return;
// grab the first item off of the stuff queue
v = stuff[0];
stuff = stuff.slice(1);
// call to google
directionsService.route(v, function(result, status) {
var googleLeg = result.routes[0].legs[0];
// sth else...
// now continue processing the rest of the stuff queue through tail recursion
continueSync();
});
}
// kick off our recursive processing
continueSync();
}
答案 1 :(得分:1)
您的问题是,调用google服务是异步调用,您可以证明会生成线程