帖子
帖子
用户
博客
课程
123下一页
返回列表 发新帖
6
帖子
0
勋章
72
Y币
CKHan 发表于 2019-5-8 10:52
。。。把你想实现的,直接写在回调函数里面就可以啦
  //GPS经纬度转百度坐标
  bMap.transCoords({

bMap.transCoords如果只转一个点,那可以在回调函数里接着写想做的事,但现在是有很多点想转坐标,想把转换后的坐标值传出来放在一个数组里面
7
帖子
0
勋章
108
Y币
本帖最后由 CKHan 于 2019-5-8 15:42 编辑

function batchTransCoords(original_coords_lists)
{
        if(!original_coords_lists.length)
                return;
        
        //百度的坐标数组
        var coords_lists = [];
        
        function transCoords(index)
        {
                var original_coords = original_coords_lists[index];
                bMap.transCoords({
                  type: "GPS",
                  lon: original_coords.lon,
                  lat: original_coords.lat,
                  mcode: '******'
                }, function(ret, err) {
                        var coords = {
                                lon: ret.lon,
                                lat: ret.lat
                        };
                        coords_lists.push(coords);
                        
                        //全部转换完成,就结束,否则继续转换
                        if(original_coords_lists.length == coords_lists.length)
                        {
                                console.log(coords_lists);
                        }
                        else
                                transCoords(index + 1);
                });        
        }
        
        transCoords(0);
}
6
帖子
0
勋章
72
Y币
CKHan 发表于 2019-5-8 11:24
function batchTransCoords(original_coords_lists)
{
        if(!original_coords_lists.length)

辛苦辛苦,非常感谢!拓宽了思路,我试试
22
帖子
0
勋章
1915
Y币
这是个异步方法,需要等待执行完成后才会有值
6
帖子
0
勋章
72
Y币
TinkerXXX 发表于 2019-5-8 13:11
这是个异步方法,需要等待执行完成后才会有值

确实是啊,还是异步,取不出来值啊

undefined at main.html : 229

提示未定义,程序执行完后才console值
6
帖子
0
勋章
72
Y币
本帖最后由 程航Beijing 于 2019-5-8 15:52 编辑
CKHan 发表于 2019-5-8 11:24
function batchTransCoords(original_coords_lists)
{
        if(!original_coords_lists.length)

我在主程序里面加了两行代码

                        var coords_lists=batchTransCoords(original_coords_lists);
                        console.log(JSON.stringify(coords_lists));              // 229行
在function里面加了一行

                                    console.log(JSON.stringify(coords_lists));
                                    return coords_lists;

undefined at main.html : 229

提示未定义,程序执行完后才console值

6
帖子
0
勋章
72
Y币
TinkerXXX 发表于 2019-5-8 13:11
这是个异步方法,需要等待执行完成后才会有值

增加两行代码

                        var coords_lists=batchTransCoords(original_coords_lists);
                        console.log(JSON.stringify(coords_lists));


确实是异步,提示出错,执行完后才有值,咋整啊
7
帖子
0
勋章
108
Y币
。。。不是这样用的,bMap.transCoords是异步的,需要使用回调函数。

function batchTransCoords(original_coords_lists, callback)
{
        if(!original_coords_lists.length)
                return;
       
        //百度的坐标数组
        var coords_lists = [];
       
        function transCoords(index)
        {
                var original_coords = original_coords_lists[index];
                bMap.transCoords({
                  type: "GPS",
                  lon: original_coords.lon,
                  lat: original_coords.lat,
                  mcode: '******'
                }, function(ret, err) {
                        var coords = {
                                lon: ret.lon,
                                lat: ret.lat
                        };
                        coords_lists.push(coords);
                       
                        //全部转换完成,就结束,否则继续转换
                        if(original_coords_lists.length == coords_lists.length)
                        {
                                if(typeof callback === "function")
                                        callback(coords_lists);
                        }
                        else
                                transCoords(index + 1);
                });        
        }
       
        transCoords(0);
}


//使用方法
batchTransCoords(original_coords_lists, function(coords_lists) {
        console.log(JSON.stringify(coords_lists));
});

6
帖子
0
勋章
72
Y币
CKHan 发表于 2019-5-8 15:46
。。。不是这样用的,bMap.transCoords是异步的,需要使用回调函数。

function batchTransCoords(original ...

是啊,一直卡在异步这,小白,不好意思,辛苦了!!
6
帖子
0
勋章
72
Y币
CKHan 发表于 2019-5-8 15:46
。。。不是这样用的,bMap.transCoords是异步的,需要使用回调函数。

function batchTransCoords(original ...

不好意思,继续追问一下,用这个方法确实能在log里面console转换后坐标,但是我目的是想把转换后坐标传递出来,赋值给新的数组,在别的地方调用,该如何实现?
123下一页
您需要登录后才可以回帖 登录

本版积分规则