JS请教一个关于两个异步方法的问题

qq_38588922 2019-06-24 10:00:33
我想实现一个需求,通过websocket方法从后台获取到一个经纬度,然后前台调用高德地图的路线绘制方法,将这个经纬度传入,然后因为onmassage方法和高德地图的绘制方法都是异步的。我想要先获取到经纬度,然后再去调用高德地图的方法,用Deferred方法也没有成功实现我想要的效果,想请大佬帮我看一下我代码哪里写的有问题


var dtd = $.Deferred(); // 新建一个Deferred对象
var map = new AMap.Map("container", {
center: [116.397559, 39.89621],
zoom: 14
});
console.log(map.complete);
var markers=[];
var startLat=[];
var socket;
function websocket(){
socket = new WebSocket("ws://localhost:8088/ws");
socket.onopen = function() {
console.log("连接建立成功...");
};
socket.onclose = function() {
console.log("连接关闭...");
};
socket.onerror = function() {
console.log("发生错误...");
};
var mesg = function(dtd){
socket.onmessage = function(e) {
console.log("接受到消息:" + e.data);
startLat.push(Number(e.data));
console.log(startLat);
};
};
mesg();
if(startLat.length==4){
dtd.resolve(startLat); // 改变Deferred对象的执行状态
};
return dtd.promise(); // 返回promise对象
console.log('123');
};


var wait = function(dtd){
var tasks = function(){
this.websocket();
if(startLat.length==4){
dtd.resolve(); // 改变Deferred对象的执行状态
}
};
tasks();
return dtd.promise(); // 返回promise对象
};
var d = wait(dtd); // 新建一个d对象,改为对这个对象进行操作
$.when(d)

.done(function(){ mapDriving(); })

.fail(function(){ alert("出错啦!"); });
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38588922 2019-06-24
  • 打赏
  • 举报
回复
引用 1 楼 讨厌走开啦 的回复:
如果你需要的经纬度是高德的center,那就在onmassage里获取到经纬度以后再执行new AMap,如果是其他经纬度,高德应该有异步绘制marker的方法,去官方API里找一下。


感谢!!我问题解决了
讨厌走开啦 2019-06-24
  • 打赏
  • 举报
回复
如果你需要的经纬度是高德的center,那就在onmassage里获取到经纬度以后再执行new AMap,如果是其他经纬度,高德应该有异步绘制marker的方法,去官方API里找一下。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧