js里关于函数间return赋值的一个问题

图片描述

使用高德地图的地址解析函数,return results总是比results的赋值先执行怎么办?

阅读 5.7k
3 个回答

这是异步调用,一般通过回调函数或者 Promise 来解决。

geocoder_Callback() 就是一个回调,在异步调用 getAddress 得到结果之后执行。但是你应该直接在 geocoder_Callback() 里进行取得 results 之后的操作而不是返回出来。

使用 Promise 的方法需要引入 Promise 库(如果你不是使用 es6 的话)基本思路如下:

function handle() {
    var promise = Promise.create();
    
    xxx.getAddress(data) {
        var results = geo_callback(data);
        promise.resolve(results);
    }
    
    return promise
}

// 使用结果
var p = handle()
p.then(function(results) {
    // 这里处理得到的 results
});

当然了,你上面的getAddress的结果是在回调函数里的,当它执行完了才会走到geocoder_Callback,你在geocoder函数加个callback参数,然后再用callback(results)把数据传回去

因为js是异步的,results的赋值执行的时间比return results执行的时间长呢,因为异步的缘故,所以js不会等待每条语句执行完才会执行下一条语句,所以执行到return results的时候results的赋值还没执行完呢

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏