1

我的问题是我想遍历一个数组并检索每个项目的 JSON 数据,然后填充它。我知道下面的方法不起作用,因为它会在收到第一个响应之前循环遍历每个“n”。

对我来说有意义的是在我的回调函数中再次调用请求。因此,在收到第一个响应后,它将拨打电话以获取第二个响应......等等,等等。

任何人都可以帮助我如何去做这样的事情吗?最终目标是用适当的响应填充每个数组项。我是编程新手,所以这对我来说有点复杂。

 function getDistance() {

    for (n in addresses()) {
        var service = new google.maps.DistanceMatrixService();
        service.getDistanceMatrix(
          {
              origins: [clientLocation()],
              destinations: [addresses()[n].position()],
              travelMode: google.maps.TravelMode.DRIVING,
              unitSystem: google.maps.UnitSystem.IMPERIAL,
              avoidHighways: false,
              avoidTolls: false
          }, callbackFunction);
    }



function callbackFunction (response, status) {
    addresses()[n].distanceText(response.rows[0].elements[0].distance.text)
    addresses()[n].distanceValue(response.rows[0].elements[0].distance.value)              
    //get the next one??

};  

}

PS我知道我应该向距离矩阵服务发送一个数组,我会的,但我想一般地找出这个问题,因为它经常出现。

PPS 我使用的是 knockout.js,因此是addresses()[n] 调用。

谢谢你。

4

1 回答 1

0

您可以使用arguments.callee自己调用函数:

function callbackFunction (response, status) {
    addresses()[n].distanceText(response.rows[0].elements[0].distance.text)
    addresses()[n].distanceValue(response.rows[0].elements[0].distance.value)              

    //get the next one??
    arguments.callee(response, status);
};  

我不熟悉 Knockout,因此您可能需要对其进行一些修改以满足您的需要。

于 2013-05-07T17:37:07.373 回答