directionsService.route没有很好地同步

时间:2016-12-09 23:23:40

标签: angularjs google-maps

我正面临一个奇怪的案例,我正在使用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]);对此有任何想法吗?

2 个答案:

答案 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服务是异步调用,您可以证明会生成线程