首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双循环回调

双循环回调
EN

Stack Overflow用户
提问于 2015-06-20 22:04:20
回答 2查看 39关注 0票数 0

我在循环中看到了回调的例子,循环需要等待回调,我不知道如何将这些答案应用到我的脚本中。

实际上,我有一个这样的双圈:

代码语言:javascript
复制
var marker = [{43.000,-79.321},...];
var result = [];

function test(){
    for(var i=0; i<marker.length;i++){
        result[i] =[];
        for(var j=0; j<marker.length;j++){
            drivingDistance(marker[i],marker[j],i,j,function(cb){
                result[cb.i][cb.j] = cb.distance;
            });
        }
    }
}

function drivingDistance(Point1,Point2,i,j,cb){
    cb({distance:'something',i:i,j:j});
}  

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-20 22:39:41

作为一种本地递归选择,下面是一种方法

代码语言:javascript
复制
var marker = [[43.000,-79.321],[44.000,-79],[45.000,-78],[46.000,-77]];
var result = [];
var i=0, j=0;

function test(){
    if(j >= marker.length){ j=0; i++; } // j is done one lap, reset to 0, i++ for next lap
    if(i >= marker.length){ return false; } // if there are no more laps, stop recursion
    if(j == 0){ result[i] = []; } // new lap, set result[i] as empty

    drivingDistance(marker[i],marker[j],i,j,function(cb){
        result[cb.i][cb.j] = cb.distance;
        j++; // increment j before next recursion
        test();
    });
}

function drivingDistance(Point1,Point2,i,j,cb){
    cb({distance:'something',i:i,j:j});
}

test();
票数 0
EN

Stack Overflow用户

发布于 2015-06-20 22:27:12

首先,您应该使用方括号[]来保存您的观点,而不是curly要点。

代码语言:javascript
复制
var marker = [[43.000,-79.321]]; // instead of [{43.000,-79.321}]
              ^              ^

然后,您只需使用延迟/承诺概念来同步所有内部回调,如下所示

代码语言:javascript
复制
var marker = [[43.000,-79.321]];
var result = [];

function test(){
    var deferreds = [];

    for(var i=0; i<marker.length;i++){
        result[i] =[];
        for(var j=0; j<marker.length;j++){

            // add all your deferred instances returned by drivingDistance
            deferreds.push( drivingDistance(marker[i],marker[j],i,j) );
        }
    }

  $.when.apply(null, deferreds).then(function() {
    var cbs = arguments,
        cb
    ;

    for(var j = 0 ; j < cbs.length ; j++) {
      cb = cbs[j];
      result[cb.i][cb.j] = cb.distance;
    }

  }).done(function() {

      // You can safely print out the result array
      console.log(result);
  });

}

function drivingDistance(Point1,Point2,i,j,cb){

    var d = $.Deferred();

    d.resolve({distance:'something',i:i,j:j});

    return d;
}  

test();

有关更多信息,请参见jQuery.When

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30959328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档