JS请教一个关于两个异步方法的问题
我想实现一个需求,通过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("出错啦!"); });